面试题58 二叉树的下一个结点

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
 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==NULL)
17             return NULL;
18         if(pNode->right!=NULL)
19         {
20             pNode=pNode->right;
21             while(pNode->left!=NULL)
22                 pNode=pNode->left;
23             return pNode;
24         }  
25         while(pNode->next!=NULL)
26         {
27             TreeLinkNode *proot=pNode->next;
28             if(proot->left==pNode)
29                 return proot;
30             pNode=pNode->next;
31         }
32         return NULL;
33     }
34 };

 

posted @ 2016-04-10 20:12  早杰  阅读(153)  评论(0编辑  收藏  举报