1. 程式人生 > >二叉樹中序遍歷的下一個節點

二叉樹中序遍歷的下一個節點

while tro struct 包含 sub 順序 其中 itl lin

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 思路:分多種情況討論
 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)return NULL; 17 if(pNode->right)//如果有右子樹,那麽沿右子樹往下最左邊的節點即為下一個節點 18 { 19 TreeLinkNode *p=pNode->right; 20 while
(p->left)p=p->left; 21 return p; 22 }else{//如果沒有右子樹,看父節點 23 TreeLinkNode *father=pNode->next; 24 if(father==NULL)return NULL;//如果沒有父節點,返回NULL 25 else{ 26 if(father->left==pNode)return father;//如果該節點為父節點的左孩子,則中序遍歷下一個節點即為父節點
27 else{ 28 TreeLinkNode *grandFather=father->next; 29 while(grandFather)//如果該節點為父節點的右孩子,則往上不斷查找曾祖父節點,直到有一個節點是其父節點的左孩子 30 { 31 if(grandFather->left==father)return grandFather; 32 father=grandFather; 33 grandFather=father->next; 34 } 35 return NULL;//如果找不到,返回NULL 36 } 37 } 38 } 39 } 40 };

二叉樹中序遍歷的下一個節點