二叉树的下一个节点
题目:
给定一个二叉树的一个节点,在中序遍历中求出这个节点的下一个节点。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190801104812570.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzMwNTE5NzY1,size_16,color_FFFFFF,t_70思路:
可以观察这个树找到规律
/**
* 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) {
if(p.right != null){
p = p.right;
while(p.left != null){
p = p.left;
}
return p;
}
while(p.father != null && p == p.father.right)p = p.father;
return p.father;
}
}
总体就分为两种情况:
- 有右子树,通过遍历找到右子树的左端点
- 无右子树,向上寻找,找到自己是左儿子的这个点,停下来,这个点的父节点就是这种情况的后继节点