面试题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 };