将二叉搜索树转换为排序双链表

 1 class Solution {
 2 public:
 3     TreeNode *head=NULL,*prev=NULL;
 4     TreeNode* Convert(TreeNode* root)
 5     {
 6         if(root == NULL) return NULL;
 7         if(root->left == NULL && head == NULL) head=prev=root;//满足这个条件的一定是最左下角的叶子节点或根节点,作为排序链表的头部,此后head固定
 8         Convert(root->left);                                    //转换左子树
 9         if(prev != root)                         //prev记录了上一个节点,将其与当前节点串起来,串起来后,prev更新为当前节点,由于第一个节点的设置,所以prev!=root才行
10         {
11              prev->right=root;
12              root->left=prev;
13              prev=root;
14         }
15         Convert(root->right);                          //转换右子树
16         return head;
17     }
18 };

其实就是按照中序遍历树节点,然后将上一个节点与当前节点串接起来。

posted @ 2017-08-01 19:52  木子可  阅读(175)  评论(0编辑  收藏  举报