二叉树
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
利用前序和后序的关系来构建
1 | # -*- coding:utf-8 -*- |
序列化与反序列化
1 | # Definition for a binary tree node. |
公共祖先
主要是突出一个思想:
(一个节点也可以是它自己的祖先)
所以一旦看到当前节点root是p、q其中一个,立刻返回
1 | # Definition for a binary tree node. |
二叉树的子结构相同
主要是用深搜DFS来做
只要懂如何用深搜比较两棵树,然后对A的每个节点都这样做就ok了!
1 | # Definition for a binary tree node. |
交换左右节点——二叉树镜像
1 | class Solution: |
平衡二叉树
1 | #我的做法,内存占用和时间消耗与下一法差不多 |
二叉树的深度
python的三元表达式
res='zuo' if x > y else 'you'
1 | class Solution: |
二叉树的子结构
1 | # Definition for a binary tree node. |
先说结论:切片[::-1] 有返回值, reverse()函数没有返回值
有返回值的可以 return、赋值。没有的不能 return、赋值。
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
1 | l.reverse() |
1 | # Definition for a binary tree node. |
不同的二叉搜索树-ii
给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。
1 | 示例: |
主要是
- 遍历选取不同的根节点
- 然后递归获得左子树的根节点数组,右子树的根节点数组
- 然后创建根节点,遍历左右子树两个for循环,连上根节点,添加到list中
1 | # Definition for a binary tree node. |
二叉树展开为链表
给定一个二叉树,原地将它展开为一个单链表。
前序遍历即可
1 | # Definition for a binary tree node. |