【剑指offer刷题】JZ57:给定二叉树和某个结点,找到中序遍历顺序的下一个结点

转载请注明出处:https://blog.csdn.net/loiter2/article/details/107448160

【剑指offer刷题】JZ57:给定二叉树和某个结点,找到中序遍历顺序的下一个结点


该文章只是用来记录一下刷题过程中不会的点,但是自己太菜,做不出来的部分,有参考牛客网剑指offer部分的官方解答和各种大神的解答。本文的记录和解答用的Java语言。

1、题目分析

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

//二叉树结点,其中next是指父亲结点
public class TreeLinkNode {
   
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
   
        this.val = val;
    }
}

上述代码是题目给出的二叉树结点
很有趣的是,牛客网官方解答,直接提出,这道题作为笔试题和面试题的两种解答方式。

  • 作为笔试题,自然是求思路清晰、解答简单,追求accept,自然可能不是最优解,时间复杂度和空间复杂度可以不是最好的。
  • 作为面试题,面试官自然想听到的就是最优解

因此本文也把两种方式的解答都记录下来

1.1 暴力解法思路

最直接暴力的方法,要求某个结点中序遍历顺序的下一个结点,那直接得到整棵二叉树的中序遍历结果,然后在中序遍历结果中,找到要求的结点的下一个结点即可
具体思路为:

  • 基于给出的结点,不断找父结点,直到找到整棵二叉树的根结点
  • 基于根结点,中序遍历整棵二叉树,将遍历结果存入数组中
  • 从数组中找到需要的目标结点

这种做法的思路还是很明确的,也比较容易想到,时间复杂度也没有特别高,找到父结点为O(n),遍历二叉树为O(n),找到目标节点为O(n),总体为3*O(n);空间复杂度为存储遍历结果O(n)。
时间复杂度:O(n);
空间复杂度:O(n);

1.2 类似找规律

据说面试时,你能给面试官图解解释,面试官会比较高兴。本题没有啥特别的算法套路可以用,因此就自己画个二叉树找找规律呗,分析分析总共有几种情况,分情况给出结果即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值