二叉树的高度:节点到叶子节点的距离(用后序遍历)
二叉树的深度:节点到根节点的距离(用前序遍历)
迭代法
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
res = []
que = deque()
depth = 0
if root:
que.append(root)
while que:
size = len(que)
depth += 1
for i in range(size):
node = que[0]
que.popleft()
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
return depth
递归法:
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def maxDepth(self, root: Optional[TreeNode]) -> int:
if root == None:
return 0
return 1 + max(self.maxDepth(root.left), self.maxDepth(root.right))
迭代法:
代码:
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
if root == None:
return 0
depth = 0
que = deque()
que.append(root)
while que:
size = len(que)
depth += 1
for i in range(size):
node = que[0]
que.popleft()
for i in range(len(node.children)):
if node.children[i]:
que.append(node.children[i])
return depth
递归法:
代码:
"""
# Definition for a Node.
class Node:
def __init__(self, val=None, children=None):
self.val = val
self.children = children
"""
class Solution:
def maxDepth(self, root: 'Node') -> int:
if root == None:
return 0
depth = 0
for i in range(len(root.children)):
depth = max(depth, self.maxDepth(root.children[i]))
return depth + 1
递归法:
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
if root == None:
return 0
if root.left == None and root.right:
return self.minDepth(root.right) + 1
if root.right == None and root.left:
return self.minDepth(root.left) + 1
return 1 + min(self.minDepth(root.left), self.minDepth(root.right))
迭代法:
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minDepth(self, root: Optional[TreeNode]) -> int:
res = []
que = deque()
depth = 0
if not root:
return 0
if root:
que.append(root)
while que:
size = len(que)
depth += 1
for i in range(size):
node = que[0]
que.popleft()
if node.left:
que.append(node.left)
if node.right:
que.append(node.right)
if not node.left and not node.right:
return depth
递归法:
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def countNodes(self, root: Optional[TreeNode]) -> int:
if root == None:
return 0
left, right = root.left, root.right
leftDepth, rightDepth = 0, 0
while left:
left = left.left
leftDepth += 1
while right:
right = right.right
rightDepth += 1
if leftDepth == rightDepth:
return 2 ** (leftDepth + 1) - 1
return self.countNodes(root.left) + self.countNodes(root.right) + 1