劍指offer 二叉搜索樹與雙向鏈表

劍指offer 二叉搜索樹與雙向鏈表

題目描述

輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。

題目類別

鏈表

解題思路

代碼魯棒性:指針判空
二叉搜索樹中序遍歷就是一個排序的序列,當遍歷到根的時候,根左指向左子樹的最右節點,右子樹的最左節點指向根右
因此需要記錄遍歷的前驅節點

具體實現

/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:

    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree == nullptr) return nullptr;
        TreeNode *pre = nullptr ;

        ConvertTree(pRootOfTree, pre);
        TreeNode* pRoot = pRootOfTree;

        while(pRoot && pRoot->left){
            pRoot = pRoot->left;
        }
        return pRoot;
    }
    void ConvertTree(TreeNode* pRoot, TreeNode* &pre){
        if(pRoot == nullptr) return;
        ConvertTree(pRoot->left, pre);
        if(pre) {
            pre->right = pRoot;
            pRoot->left = pre;
        }
        pre = pRoot;
        if(pRoot->right) ConvertTree(pRoot->right, pre);          
    }
};
發佈了37 篇原創文章 · 獲贊 5 · 訪問量 8077
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章