左神算法-6-二叉树(树形DP类型解题套路)

 

递归遍历树:

递归序每个值都会出现3次

先序遍历:

由递归序得来,递归序中第一次到每个数就打印,后面到的啥都不干

中序遍历:

由递归序得来,递归序中第二次到每个数就打印,后面到的啥都不干

 

后序遍历:

由递归序得来,递归序中第三次到每个数就打印,后面到的啥都不干

 

非递归遍历树:

先序遍历

准备一个栈,把头节点放入栈,接下来步骤如下:

 

 

后序遍历

先序是:头左右,如果弄出先序’:头右左,弹出不打印,放入辅助栈,再弹出辅助栈的每一个并打印,得到后序

 

 中序遍历:

中序遍历:左右头,

 

完成二叉树的宽度优先遍历

宽度遍历用队列:先把头放进队列,弹出就打 印,先放左再放右

 

常见题目:求二叉树的宽度

 

二叉树的相关概念及其实现判断

 

1、

 

用中序遍历,得到的序列如果是升序就是搜索二叉树

递归版:

 

非递归版:

 

2、如何判断一棵二叉树是完全二叉树

二叉树按宽度遍历,如果:(1)任一节点有右孩子没有左孩子,直接返回false。(2)在(1)不违反的情况下,如果遇到了第一个左右孩子不双全的情况,那么接下来所有节点都必须是叶节点

 

3、如何判断一棵二叉树是满二叉树

满二叉树满足:

 

4、如何判断一棵二叉树是平衡二叉树

 

二叉树题目解题套路总结:(树形DP)

假设可以向左、右树要信息à罗列可能性(每种可能性成立的条件是啥)à可能性固定,去整理需要左树右树什么信息(这些信息决定结构体)。

判断是否平衡二叉树

 

  1. 可能性只有一种(左边圈圈的)
  2. 满足这一种可能性需要的条件为左边的与起来都成立,需要的信息为右边圈圈里的内容。
  3. 因为需要的信息为是否平衡、高度是多少,所以结构体(递归函数返回值)定义如下:

 

完整代码

 

  1. 在调用递归的时候要获得三个字,返回的时候也要返回三个值

判断二叉树是否搜索二叉树:

 

  1. 罗列可能性(条件):左树是搜索二叉树、右树是搜索二叉树、左树max<头节点、右树min>X
  2. 需要左树右树什么信息:左树是否搜索二叉树以及最大值、右树是否搜索二叉树及最小值
  3. 虽然左树和右树要求不一样了,但因为是递归套路,所以对每一个节点要求一样,所以不管是左右,一律返回三个信息
  4. 结构体(递归返回值)定义:

判断是否满二叉树

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值