二叉树的最小深度
广度优先
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def minDepth(self, root):
if not root:
return 0
queue, level = [root], 1
while queue:
for i in xrange(len(queue)):
node = queue.pop(0)
if not node.left and not node.right:
return level
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
level += 1
二叉树遍历用列表输入每层节点
广度有优先
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def zigzagLevelOrder(self, root):
res, queue = [], [(root, 0)]
while queue:
curr, level = queue.pop(0)
if curr:
if len(res) < level+1:
res.append([])
if level % 2 == 0:
res[level].append(curr.val)
else:
res[level].insert(0, curr.val)
queue.append((curr.left, level+1))
queue.append((curr.right, level+1))
return res
深度优先
def zigzagLevelOrder(self, root):
ans = []
self.dfs(root, 0, ans)
for i in range(len(ans)):
if i%2:
ans[i] = ans[i][::-1] # reverse
return ans
def dfs(self, root, level, ans):
if not root:
return
if len(ans) < level+1: #should >= level+1
ans.append([])
ans[level].append(root.val)
self.dfs(root.left, level+1, ans)
self.dfs(root.right, level+1, ans)