二叉树专题(3)
pq
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
示例 1:
输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:
输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:
输入:p = [1,2,1], q = [1,1,2]
输出:false
提示:
[0, 100]-10^4 <= Node.val <= 10^4
代码1: 递归
输出:
[1,2,3]
[1,2,3]
true
[1,2]
[1,null,2]
false
代码2: 非递归
1. 定义一个栈,将 p 和 q 按顺序入栈。
2. 当栈不为空时,弹出栈顶元素,判断它们的值是否相等。如果不相等,返回 false。
3. 如果它们的值相等,继续判断它们的左右子树是否相等。如果 p 和 q 的左子树都不为空,则将它们的左子树按顺序入栈。如果 p 和 q 的右子树都不为空,则将它们的右子树按顺序入栈。
4. 如果栈为空,则说明 p 和 q 的所有节点都已经比较完毕,返回 true。
root
示例 1:
输入:root = [1,2,2,3,4,4,3]
输出:true
示例 2:
输入:root = [1,2,2,null,3,null,3]
输出:false
提示:
树中节点数目在范围 [1, 1000] 内
-100 <= Node.val <= 100
进阶:你可以运用递归和迭代两种方法解决这个问题吗?
代码1:递归
输出:
[1,2,2,3,4,4,3]
true
[1,2,2,null,3,null,3]
false
[1,2,2,null,3,3]
true
代码2: 非递归
使用队列进行迭代,每次将左右子树的节点按照对称的方式入队,然后依次出队进行比较,如果不相等则返回 false,如果相等则继续迭代。
代码3: 中序对称
先中序遍历二叉树,然后判断中序遍历结果是否是对称序列。
root
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
代码1: 队列实现广度优先搜索 BFS
从根节点开始,将其加入队列中,然后不断从队列中取出节点,将其左右子节点加入队列中,直到队列为空,遍历完成。在遍历每一层时,将该层的节点值加入结果数组的末尾。
输出:
[[3] [9 20] [15 7]]
代码2: 递归实现深度优先搜索 DFS
对于每一层,先遍历左子树,然后遍历右子树,直到遍历完所有层。在遍历每一层时,将该层的节点值加入结果数组的末尾。