二叉搜索樹與雙向鏈表

題目描述
輸入一棵二叉搜索樹,將該二叉搜索樹轉換成一個排序的雙向鏈表。要求不能創建任何新的結點,只能調整樹中結點指針的指向。
遞歸思路:
中序遍歷,記錄pre。左子樹走到頭的pre應該是null,所以初始pre=null,左子樹的pre是原來的左孩子, 右子樹的pre是它的父節點。
/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
class Solution {
public:
    void BeList(TreeNode* root, TreeNode* &pre){
        if(!root) return ;
        BeList(root->left, pre);
        root->left = pre;
        if(pre) pre->right = root;
        pre = root;
        BeList(root->right, pre);
    }
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(!pRootOfTree)
            return nullptr;
        TreeNode* pre = nullptr;
        TreeNode* res = pRootOfTree;
        BeList(pRootOfTree, pre);
        while(res->left)
            res = res->left;
        return res;
    }
};
圖解:

1
2
3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章