【剑指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 };
原文地址:https://www.cnblogs.com/Asumi/p/12423505.html