第2章 面试需要的基础知识
第3章 高质量的代码
第4章 解决面试题的思路
面试题27 :二叉树的镜像
面试题29 :顺时针打印矩阵
面试题30 :包含min函数的栈
面试题31:栈的压入、弹出序列
面试题32:上往下打印二叉树、之字形打印二叉树、分行从上打下打印二叉树
面试题33: 二叉搜索树的后序遍历序列
第5章 优化时间和空间效率
第6章 面试中的各项能力
第7章 两个面试案例
题目描述
牛客网
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
解题思路
一层一层访问节点,当然是用宽度优先搜索了。用一个列表保存每次访问的节点值。
实战
要注意的是从stack的底部取出节点。
class Solution:
# 返回从上到下每个节点值列表,例:[1,2,3]
def PrintFromTopToBottom(self, root):
# write code here
if not root:
return []
nodes = []
stack = [root]
while stack:
node = stack.pop(0)
nodes.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return nodes
题目描述
牛客网
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路
层次遍历,遍历完一层后保存结果。
实战
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表[[1,2],[4,5]]
def Print(self, pRoot):
# write code here
if not pRoot:
return []
nodes = [pRoot]
results = []
while nodes:
temp, res = [], []
for node in nodes:
res.append(node.val)
if node.left:
temp.append(node.left)
if node.right:
temp.append(node.right)
results.append(res)
nodes = temp
return results
题目描述
牛客网
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
仍然是广度优先搜索,层次遍历二叉树,只不过需要记录该层是奇数层还是偶数层,以此来决定是从右向左存储还是从左向右存储节点。
实战
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def Print(self, pRoot):
# write code here
if not pRoot:
return []
nodes = [pRoot]
results = []
even = True
while nodes:
temp, res = [], []
for node in nodes:
res.append(node.val)
if node.left:
temp.append(node.left)
if node.right:
temp.append(node.right)
if res:
if not even:
results.append(res[::-1])
even = True
else:
results.append(res)
even = False
nodes = temp
return results