二叉树算法

  遇到null就会返回到自己,所以可以在2和3处加上想要做的操作。

 每个节点都会出现三次

树的先序遍历: 遇到第一个节点就打印

 二叉树的遍历

 

 任何递归都可以用非递归的形式实现。先把第一个节点放进去

 

 中序':是先压左再压右

 通过中序' 实现栈的后序遍历

 

 

 

 

 

 

宽度优先遍历:利用队列先放左再放右

 宽度优先遍历代码

 

 通过宽度优先遍历求二叉树的宽度.

 不使用hash表,来求宽度,只利用几个变量循环遍历

搜索二叉树就是每一个节点的左子树都比它小,右子树都比它大。一颗经典的搜索树是没有重复值的。

如何判断一颗二叉树是否是搜索二叉树?

使用中序遍历,然后看是否顺序是升序的。

下面是  ,换成比较时机。

 上图更傻白甜的代码

 非递归的代码修改

 如何判断一棵树是否是完全二叉树。使用宽度遍历

 

 

 满二叉树肯定满足的规则

 平衡二叉树:任何一个节点,它左树的高度和它右树的高度之差不能超过1

分析判断左右子树的条件,发现所需条件相同。左右子树条件都相同 

 判断是平衡二叉树的第二种方式

 

 

 判断是否是满二叉树

 

 树型DP(每一个节点都需要左树信息和右树信息)都可以用以上方法求解

 

最低公共祖先就是两个节点最先汇聚到哪个节点。E和F的公共祖先是汇聚到E,E就是公共祖先 

 

第二种方法

情况1:

情况二:

 做了大量的优化:

  

  后继节点指的是中序遍历中,遍历节点的后面节点

分析思路:现在已知树的节点是有指向父亲的指针,如果使用中序遍历确定其后继节点,那么每次都需要O(N)的时间复杂度。

从树的结构上来看,其实我们知道每个节点的父节点。通过父节点指针,如E走两步就知道自己的后继节点为A。如果每个节点算k步的话,时间复杂度为O(k)。如何从树的结构上找到每个节点的后继节点是关键。 

x在有右树的时候,x右树最左侧的节点一定是它的后继   

 

 x没有右树时,就往上看,看是不是某个节点的左子树

 

 

 用先序遍历 序列化二叉树。遇到一个值就打印加一个下划线。null打印为#。以什么方式序列化就用什么方式反序列化

 

 

 微软原题:

训练敏感程度!每一道题都来自于基础。问题是什么基础。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值