1. 程式人生 > >劍指Offer——二叉樹的下一個結點

劍指Offer——二叉樹的下一個結點

劍指offer col 註意 包含 amp 下一個 nbsp 如果 logs

題目描述:

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。


分析:

  1. 如果該結點存在右子樹,那麽返回右子樹的最左結點。
  2. 如果該結點不存在右子樹,那麽如果該結點不是其父結點的最右結點,那麽返回父結點;
    否則一直找到最大子樹的最右結點是該結點,那麽返回該最大子樹的根結點的父結點。


代碼:

 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 if(pNode->right == NULL) { 16 if(pNode->next == NULL) return
NULL; 17 TreeLinkNode* p1 = pNode; 18 TreeLinkNode* p2 = pNode->next; 19 while(p2 && p2->right == p1) { 20 p1 = p1->next; 21 p2 = p1->next; 22 } 23 if(p2) return p2; 24 return NULL;
25 } 26 TreeLinkNode* nextNode = pNode->right; 27 while(nextNode->left) { 28 nextNode = nextNode->left; 29 } 30 return nextNode; 31 } 32 };

劍指Offer——二叉樹的下一個結點