文章目录
- 二叉树的遍历方式
- 二叉树的属性
- 二叉树的修改与构造
- 求二叉搜索树的属性
- 二叉树公共祖先问题
- 二叉搜索树的修改与构造
二叉树的遍历方式
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def dfs(root):
if root is None:
return
res.append(root.val)
dfs(root.left)
dfs(root.right)
dfs(root)
return res
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def dfs(root):
if root is None:
return
dfs(root.left)
dfs(root.right)
res.append(root.val)
dfs(root)
return res
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def dfs(root):
if root is None:
return
dfs(root.left)
res.append(root.val)
dfs(root.right)
dfs(root)
return res
二叉树的属性
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if root is None:
return 0
return max(self.maxDepth(root.left), self.maxDepth(root.right)) + 1
class Solution:
def minDepth(self, root: TreeNode) -> int:
if root is None:
return 0
elif root.left is not None and root.right is not None:
return min(self.minDepth(root.left), self.minDepth(root.right)) + 1
else:
return max(self.minDepth(root.left), self.minDepth(root.right)) + 1
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
def isSym(left, right):
if left and right:
return left.val == right.val and isSym(left.left, right.right) and isSym(left.right, right.left)
else:
return left == right
return isSym(root, root)
二叉树的修改与构造
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if not preorder and not inorder:
return None
root = TreeNode(preorder[0])
ind = inorder.index(root)
left_node = self.buildTree(preorder[1:ind], inorder[ind+1:])
right_node = self.buildTree(preorder[ind+1:], inorder[ind+1:])
root.left = left_node
root.right = right_node
return root
class Solution:
def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
if not inorder and not postorder:
return None
root = TreeNode(postorder[-1])
ind = inorder.index(root)
left_node = self.buildTree(inorder[:ind], postorder[:ind])
right_node = self.buildTree(inorder[ind+1:], postorder[ind:-1])
root.left = left_node
root.right = right_node
return root
求二叉搜索树的属性
二叉树公共祖先问题
二叉搜索树的修改与构造