/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode father;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
/**
* 获取二叉树中序遍历结点的下一个结点
*
* @param p 某结点
* @return p的下一个结点
*/
public TreeNode inorderSuccessor(TreeNode p) {
if (p == null) {
return null;
}
TreeNode cur = p.right;
// 右子树不为空
if (cur != null) {
while (cur.left != null) {
cur = cur.left;
}
return cur;
}
// 右子树为空
TreeNode father = p.father;
while (father != null && father.left != p) {
p = father;
father = p.father;
}
return father;
}
}
分析一下如果是父节点的右节点,为什么要这样找下一分
有以下几种情况 一
情况二
所以要通过遍历找出 该节点的父节点的左节点是否等于该节点。
即结束条件是循环 father.left == p