二叉搜索树中的中序后继

在这里插入图片描述

有两种思路:

  1. 每次都把节点存入一个变量中,相当于前驱节点,当下次遍历的时候如果前驱节点和目标节点的值相等,那么我们需要的就是当前的节点。注意的是,要创建两个变量,一个存结果,一个存前驱节点。否则直接返回前驱节点的话会导致如果下一个节点为空,他也会返回一个节点,而不是我们期盼的null。
  2. 设置一个flag,当当前节点和目标节点值相等的时候我们让flag为true。下一次遍历,当flag为true的时候返回当前节点。
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    TreeNode pre;
    TreeNode res;
    public TreeNode inorderSuccessor(TreeNode root, TreeNode p) {
        dfs(root,p);
        return res;
    }
    public void dfs(TreeNode root,TreeNode p){
        if(root == null) return;
        dfs(root.left,p);
        if(pre != null && res == null){  //这里千万注意 res == null  的意思是 只给res赋值一次。否则他在回溯的过程会不断的赋值 覆盖。
            if(pre.val == p.val){
                res = root;
                return;
            }
        }
        pre = root;
        dfs(root.right,p);
    }
}

一开始没有res == null 那 结果如下
在这里插入图片描述

虽然知道为啥不对 但是我还是纳闷为啥结果不是6.经过debug调试发现原因是因为在判断里面赋值后就return了没有进入5的右节点。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值