二叉樹的下一個結點
阿新 • • 發佈:2020-07-15
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
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 };
思路: