【剑指offer】二叉树的下一个结点
题目链接:二叉树的下一个结点
题意:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题解:中序遍历查找下一个节点。也是数据结构里的常见题。
当前节点如果有右子树,下一个节点是右子树最左节点。
当前节点如果没有右子树,下一个节点是它的祖先节点。即找以它父亲节点为左孩子的节点。
代码:
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 //有右子树,右子树最左节点 18 if(pNode->right != NULL){ 19 pNode=pNode->right; 20 while(pNode->left!=NULL) pNode = pNode->left; 21 return pNode; 22 } 23 //当前节点为父亲节点的左孩子的父亲节点 24 while(pNode->next!=NULL){ 25 if(pNode->next->left == pNode) return pNode->next; 26 pNode = pNode->next; 27 } 28 return NULL; 29 } 30 };