代码随想录算法训练营第20天 | 关于最大二叉树、关于合并二叉树、关于二叉搜索树中的搜索、关于验证二叉搜索树。

关于 最大二叉树

构造树一般采用的是前序遍历,因为先构造中间节点,然后递归构造左子树和右子树。

关于 合并二叉树

Note:前序、中序、后序都是ok的!但是前序最好理解

 

 

关于 二叉搜索树中的搜索
  • 二叉搜索树->中序遍历搞定一切问题!!一定要利用这个特性!
  • 一个技巧:二叉搜索树自己设置一个pre节点+中序其实就相当于遍历一个有序链表了
  • 有同学问为什么很多题不用迭代做,其实大多数题都是用递归是最直观简单好写的,如果用迭代写本质上也是栈去模拟递归的过程,不是那么好写,所以大多数题掌握递归法就够可以了。除了最基本的前中后序遍历可以把迭代法学一下,其他的题目主要掌握递归就可以了,也是够面试用的了。
  • 解题代码中return的是一个节点,但是输出的却是一整个子树,例如截图中的,输出的应该只有一个2,但是却把2 1 3都输出了,这是怎么回事呢?
    力扣中我们写的只是一个功能函数  这个函数会在主函数中被调用 然后力扣会在主函数中以特定的顺序遍历打印出这个节点的val值和它所有的子节点的val值

关于 验证二叉搜索树
  • pre变量的作用:这个就是记录二叉搜索树中当前节点的前一个用来比较的节点,当从左子树最大的一个节点回溯到当前节点时,那就是用左子树的最大的节点和当前root比较;然后pre被root赋值,又用于右子树最小的一个节点用于比较,就是判断 if (pre != NULL && pre->val >= root->val) return false;类似中序,你按中序那二叉搜索树就是从小大按顺序,pre就是这个顺序中,当前pre的上一个,每次比较完pre就更新为当前的root,可以先看成一个一维数组去理解,再抽象成二叉搜索树。
  • 为什么pre放在外面而不是方法里面:因为放在外面才可以被递归的每一层访问到,里面的话就是局部变量,每一层都相互独立,就起不到一层的修改让另一层可见的作用了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值