二叉树的下一个结点

一共有一下情况:

1、只要有右子树,就找右子树中最左的节点;

2、没有右子树,就像上遍历,找第一个当前节点是父节点的左孩子的节点

3、退到了根节点,还没找到,就返回NULL

 1 /*
 2 struct TreeLinkNode {
 3     int val;
 4     struct TreeLinkNode *left;
 5     struct TreeLinkNode *right;
 6     struct TreeLinkNode *next;
 7     TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
 8         
 9     }
10 };
11 */
12 class Solution {
13 public:
14     TreeLinkNode* GetNext(TreeLinkNode* pNode)
15     {
16         if(pNode==nullptr) return pNode;
17         if(pNode->right){
18             pNode = pNode->right;
19             while(pNode->left){
20                 pNode = pNode->left;
21             }
22             return pNode;
23         }
24         while(pNode->next){
25             if(pNode->next->left == pNode) return pNode->next;
26             pNode = pNode->next;
27         }
28         return NULL;
29     }
30 };

 

posted @ 2019-07-25 10:59  Austin_anheqiao  阅读(175)  评论(0编辑  收藏  举报