二叉搜索树与双向链表

题目描述

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
///////////////////////////////////////////////////////////////
下午有点晕晕的,感觉不太好,改了改也算是过了,
中序遍历,一开始不知道如何判断是该返回root左边的还是右边的节点,所以加了一个flag判断一下,
如果flag=1,说明对于上一层节点,这是左子树,那么返回root最右边的节点,
如果flag=2,说明对于上一层,这是右子树,那么返回root最左边的节点,
flag=0,说明到了根节点那里,返回最左边的节点就是链表最开始的节点了。
******************************************************************************************
后来我看了解答,发现好像返回谁都行,因为你返回以后,上一层的root节点接收你返回的节点,如果这是左子树返回的,那么找到最后就是要连接的节点了
如果是右子树返回的,那么找到最左边的那个,就是root后面要跟着的节点了。
//还有一些细节比如为空之类的就不提了
 
 
 
 1 /**
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15     public TreeNode Convert(TreeNode pRootOfTree) {
16         if(pRootOfTree==null)
17             return null;
18         return helper(pRootOfTree,0);
19     }
20     public TreeNode helper(TreeNode root,int flag)
21     {
22         if(root==null)
23             return null;
24         TreeNode left=helper(root.left,1);
25         if(left==null)
26             root.left=left;
27         else
28         {
29             root.left=left;
30             left.right=root;
31         }
32         TreeNode right=helper(root.right,2);
33         if(right==null)
34             root.right=right;
35         else
36         {
37             root.right=right;
38             right.left=root;
39         }
40         if(flag==1)
41         {
42             TreeNode res=root;
43             while(res.right!=null)
44                 res=res.right;
45             return res;
46         }
47         else if(flag==2)
48         {
49             TreeNode res=root;
50             while(res.left!=null)
51                 res=res.left;
52             return res;
53         }
54         else
55          {
56             TreeNode res=root;
57             while(res.left!=null)
58                 res=res.left;
59             return res;
60         }
61     }
62 }
原文地址:https://www.cnblogs.com/cold-windy/p/11550392.html