翻转二叉树
翻转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
翻转二叉树-递归
1 2 3 4 5 6 7 8 9 10
| class Solution: def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]: def dfs(root): if not root: return None root.left,root.right = root.right,root.left dfs(root.left) dfs(root.right) dfs(root) return root
|
就是在前序遍历前交换左右子树
对称二叉树
对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
对称二叉树-递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution: def isSymmetric(self, root: Optional[TreeNode]) -> bool: if not root: return True return self.compare(root.left,root.right) def compare(self,left,right): if left != None and right == None: return False elif left == None and right != None: return False elif left == None and right == None: return True elif left.val != right.val: return False outside = self.compare(left.left,right.right) inside = self.compare(left.right,right.left)
return inside and outside
|
在后续遍历的基础上,判断以 left 为根的子树和以 right 为根的子树,是否互为镜像,为了让两棵子树互为镜像,必须满足以下三个条件:
它们的根节点值必须相同。
- left 子树的左孩子,必须和 right 子树的右孩子互为镜像。
- left 子树的右孩子,必须和 right 子树的左孩子互为镜像。
二叉树的最大深度
二叉树的最大深度
给你一个二叉树的根节点 root ,返回它的 最大深度 。
二叉树的最大深度-递归
1 2 3 4 5 6 7 8 9 10
| class Solution: def maxDepth(self, root: Optional[TreeNode]) -> int: return self.getdeepth(root) def getdeepth(self,node): if not node: return 0 leftdeepth = self.getdeepth(node.left) rightdeepth = self.getdeepth(node.right) deepth = max(leftdeepth,rightdeepth) + 1 return deepth
|
首先区分高度和深度
- 高度:指的是从根节点到叶子节点的最长路径上的节点数。
- 深度:指的是从根节点到当前节点的路径上的节点数。
所以这里可以用根节点的高度来表示二叉树的最大深度,而求根节点的高度可以用后序遍历。
并且初始深度为0,当前节点的深度,等于其左右子树中较深的那一个的深度,再加上当前节点自己这一层
二叉树的最小深度
二叉树的最小深度
给你一个二叉树的根节点 root ,返回它的 最小深度 。
二叉树的最小深度-递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class Solution: def minDepth(self, root: Optional[TreeNode]) -> int: return self.getdep(root)
def getdep(self,node): if not node: return 0 leftdpt = self.getdep(node.left) rightdpt = self.getdep(node.right) if leftdpt == 0 and rightdpt: return 1 + rightdpt if leftdpt and rightdpt == 0: return 1 + leftdpt return min(rightdpt,leftdpt)+1
|
这里和最大深度的区别在于,当一个节点只有左子树或右子树时,最小深度是右子树或左子树的深度加1。因此要判断一下左右子树是否为空,为空则返回另一个子树的深度加1。然后将max替换为min即可。