二叉树

二叉树先序,中序,后序遍历


递归

迭代

前序:cur指向root,将cur.val追加到res中,将root入栈,然后将cur指向cur.left,左子节点遍历完,将root出栈,cur指向right,继续遍历,尾部追加

中序:cur指向root,将root入栈,将cur指向cur.left,然后将cur.left入栈,直到遍历到左子节点最深处,pop出栈,追加到res中,然后再将cur指向右子节点,继续遍历

后续:前序的反面,cur指向root,将cur.val头部插入,然后将root入栈,然后将cur指向cur.right,右子节点遍历完,将root出栈,cur指向left,继续遍历,头部插入

二叉树层序遍历


思路:利用queue先进先出原则,将root放入,然后pop出来,再将left和right放入


运行结果

假如需要将每层内容单独统计出来,需要加一个list用来保存每层数据,遍历次数由queue的长度决定

二叉树Z字形层序遍历


思路:层序遍历的思路,用一个值判断是否是偶数,用deque append和appenleft改变值插入的顺序

二叉树镜像


思路:用一个栈来存放root,然后将左右节点放入,交换,然后弹出,最后返回root

二叉树深度


思路:层序遍历,统计层数

思路:递归,root节点的深度为左子节点和右子节点最大高度+1

二叉树翻转


思路:和二叉树深度结合实现

合并二叉树


思路:使用递归思路

二叉树多个节点的最近公共祖先


思路:使用递归算法,假如root为p或者q或者空,直接返回root

然后递归计算左子节点和右子节点

当左右子节点都为空,说明没有公共祖先

当左边不为空,右边为空,说明p和q都不在左子树中

当都不为空,说明分别在root的左右两侧

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容