面试32题:
题目:从上到下打印二叉树
题:不分行从上到下打印二叉树
解题代码:
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution:# 返回从上到下每个节点值列表,例:[1,2,3]def PrintFromTopToBottom(self, root):# write code hereif not root:return []res=[]res_val=[]res.append(root)while len(res)>0:node=res.pop(0)res_val.append(node.val)if node.left:res.append(node.left)if node.right:res.append(node.right)return res_val
题目拓展一:分行从上到下打印二叉树。
题:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题代码一:同剑指offer
# -*- coding:utf-8 -*- # 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 hereif not pRoot:return []res=[]res_val=[]res.append(pRoot)nextLevel=0 #表示下一层节点的数目toBePrinted=1 #表示当前层还没有打印的节点数temp=[]while len(res)>0:node=res[0]temp.append(node.val)if node.left:res.append(node.left)nextLevel+=1if node.right:res.append(node.right)nextLevel+=1del res[0]toBePrinted-=1if toBePrinted==0:res_val.append(temp)toBePrinted=nextLevelnextLevel=0temp=[]return res_val
解题代码二:代码更简洁。
# -*- coding:utf-8 -*- # 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 hereif not pRoot:return []res,nodes=[],[pRoot]while nodes:curStack,nextStack=[],[]for node in nodes:curStack.append(node.val)if node.left:nextStack.append(node.left)if node.right:nextStack.append(node.right)res.append(curStack)nodes=nextStackreturn res
解题代码三:cur、last记录,思路同二
# -*- coding:utf-8 -*- # 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 hereif not pRoot:return []res=[]arr=[]arr.append(pRoot)cur=0#last=1while cur<len(arr):last=len(arr)temp=[]while (cur<last):temp.append(arr[cur].val)if arr[cur].left:arr.append(arr[cur].left)if arr[cur].right:arr.append(arr[cur].right)cur+=1res.append(temp)return res
题目拓展二:之字形打印二叉树
题:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题代码一:简洁。
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution:def Print(self, pRoot):# write code hereif not pRoot:return []res=[]nodes=[pRoot]leftToRight=Truewhile nodes:curStack,nextStack=[],[]for node in nodes:curStack.append(node.val)if node.left:nextStack.append(node.left)if node.right:nextStack.append(node.right)if not leftToRight:curStack.reverse()res.append(curStack)leftToRight = not leftToRightnodes=nextStack
解题代码二:同剑指offer。
# -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution:def Print(self, pRoot):# write code hereif not pRoot:return []res=[]nodes=[pRoot]right=Truewhile nodes:curStack,nextStack=[],[]if right:for node in nodes:curStack.append(node.val)if node.left:nextStack.append(node.left)if node.right:nextStack.append(node.right)else:for node in nodes:curStack.append(node.val)if node.right:nextStack.append(node.right)if node.left:nextStack.append(node.left)res.append(curStack)nextStack.reverse()right=not rightnodes=nextStackreturn res