剑指office--------二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

 

 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->next==NULL){
17             if (pNode->right==NULL)    return NULL;
18             else{
19                 pNode=pNode->right;
20                 while (pNode->left!=NULL){
21                     pNode=pNode->left;
22                 }
23                 return pNode;
24             }
25         }
26         else if (pNode==pNode->next->left){
27             if (pNode->right==NULL)    return pNode->next;
28             pNode=pNode->right;
29             while(pNode->left!=NULL){
30                 pNode=pNode->left;
31             }
32             return pNode;
33         }
34         else{
35             if (pNode->right!=NULL){
36                 pNode=pNode->right;
37                 while(pNode->left!=NULL){
38                     pNode=pNode->left;
39                 }
40                 return pNode;              
41             }
42             
43         }
44         TreeLinkNode *Node=pNode;
45         while (pNode->next!=NULL){
46             if (pNode==pNode->next->right){
47                 pNode=pNode->next;
48             }
49             else    return pNode->next;
50         }
51         return NULL;
52     }
53 };

思路:

 

   

 

posted @ 2020-07-15 14:55  生活待我如初恋  阅读(126)  评论(0编辑  收藏  举报