二叉搜索树转为双向链表(算法)

来源:互联网 发布:淘宝类目007是什么牌子 编辑:程序博客网 时间:2024/05/01 11:39
/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public:    TreeNode* leftLast = NULL;    TreeNode* Convert(TreeNode* root)    {      if(root==NULL)            return NULL;        if(root->left==NULL&&root->right==NULL){            leftLast = root;// 最后的一个节点可能为最右侧的叶节点            return root;        }        // 1.将左子树构造成双链表,并返回链表头节点        TreeNode* left = Convert(root->left);        // 3.如果左子树链表不为空的话,将当前root追加到左子树链表        if(left!=NULL){            leftLast->right = root;            root->left = leftLast;        }        leftLast = root;// 当根节点只含左子树时,则该根节点为最后一个节点        // 4.将右子树构造成双链表,并返回链表头节点        TreeNode* right = Convert(root->right);        // 5.如果右子树链表不为空的话,将该链表追加到root节点之后        if(right!=NULL){            right->left = root;            root->right = right;        }        return left!=NULL?left:root;       }};

0 0
原创粉丝点击