1. 程式人生 > 實用技巧 >二叉樹的下一個結點

二叉樹的下一個結點

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

 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 };

思路: