7.二叉树的下一个节点
给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。
注意:
- 如果给定的节点是中序遍历序列的最后一个,则返回空节点;
- 二叉树一定不为空,且给定的节点一定不是空节点;
- 不同节点权值不同;
数据范围:
树中节点数量 [0,100]。
样例:
假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。
则应返回值等于3的节点。
解释:该二叉树的结构如下,2的后继节点是3。
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode father;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode inorderSuccessor(TreeNode p) {
//情况1:如果有右子树
//则后继节点是右子树的最左节点
if (p.right!=null) {
//先移动到右子节点
p = p.right;
//然后一直往左找,直到没有左子节点
while (p.left!=null) p = p.left;
//返回找到的最左节点
return p;
}
//情况2:如果当前节点没有右子树
//则需要向上查找父节点,直到当前节点是某个父节点的左子节点
//这个父节点就是后继节点
while (p.father!=null && p == p.father.right) p = p.father;
//返回最终的父节点
return p.father;
}
}


浙公网安备 33010602011771号