二叉树

【剑指 offer】- 二叉树的下一个结点(中序)

2019-04-06  本文已影响0人  邓泽军_3679

1、题目描述

给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。

注意:

如果给定的节点是中序遍历序列的最后一个,则返回空节点;
二叉树一定不为空,且给定的节点一定不是空节点;
样例
假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。

则应返回值等于3的节点。

解释:该二叉树的结构如下,2的后继节点是3。
  2
 / \
1 3

2、问题描述:

3、问题关键:

4、C++代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode *father;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL), father(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* inorderSuccessor(TreeNode* p) {
        if(p->right) {//有右儿子,那么右子树最左侧的就是后继。
            p = p->right;
            while(p->left) p = p->left;
            return p;
        }
        while(p->father && p == p->father->right) p = p->father;//一直找到它不是它爸爸的右儿子,或者找到根结点了。
        return p->father;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读