1.相同的树(100)
给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
思路:递归
- 如果当前两个节点都是none, 返回true.
- 如果当前有一个节点等于none,另一个不是none,返回false
- 判断两个节点的值,如果不相等,则返回false. 如果相等,则将递归调用。传入的参数分别为当前的节点的左右节点。
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
if not p and not q:
return True
if p==None or q == None:
return False
if p.val != q.val:
return False
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
知识点:无论根节点还是子节点,我们等同看待,利用递归的思想完成当前节点的比较。
2.对称二叉树(101)
给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
思路1:递归。
这里我们命名第二层的左节点为A,右节点为B。我们只要递归判断A的左节点和B的右节点、以及A的右节点和B的左节点。只要有一个返回false,则不对称。其思想和100题相同的树类似。代码可以看到与100题类似。
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root:
return True
return self.isMirror(root.left,root.right)
def isMirror(self, p, q):
if not p and not q:
return True
if p==None or q==None:
return False
if p.val != q.val:
return False
return self.isMirror(p.right,q.left) and self.isMirror(p.left,q.right)
参考链接:https://leetcode-cn.com/problems/symmetric-tree/solution/dui-cheng-er-cha-shu-by-leetcode/
3.二叉树的最大深度(104)
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
思路:递归
计算树的最大深度就是计算左右子树最大深度,然后加1. 终止条件是当前节点为0,返回0.
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root == None:
return 0
else:
return max(self.maxDepth(root.left),self.maxDepth(root.right)) + 1