题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
思路:数据容器是一个队列(先入先出)。在队列头部取出一个节点并打印它,然后先判断该节点时候有左子节点,如果有就把左子节点方到队列末尾,然后判断是否有右子节点,如果有的话就把右子节点放到队列末尾。重复此操作。
# -*- 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 here
queue = []
result = []
if not root:
return result
queue.append(root)
while len(queue):
result.append(queue[0].val)
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result
题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
# -*- 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 here
queue = []
result = []
if not pRoot:
return result
queue.append(pRoot)
while len(queue):
row = []
for i in queue:
row.append(i.val)
result.append(row)
for i in range(len(queue)):
node = queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return result
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
思路:用两个栈来表示。odd=0代表当前是奇数行,odd=1代表当前是偶数行。stack1存放奇数行,stack2存放偶数行。如果当前是奇数行,则在stack2里先存放右节点再方左节点。如果当前是偶数行,则在stack1里先存放左节点再存放右节点。
# -*- 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 here
result = []
stack1 = []
stack2 = []
if not pRoot:
return result
odd = 0
stack1.append(pRoot)
while stack1 or stack2:
row = []
if odd==0:
for i in stack1:
row.append(i.val)
else:
for i in stack2:
row.append(i.val)
result.append(row)
if odd == 0:
for i in range(len(stack1)):
node = stack1.pop()
if node.right:
stack2.append(node.right)
if node.left:
stack2.append(node.left)
if odd ==1:
for i in range(len(stack2)):
node = stack2.pop()
if node.left:
stack1.append(node.left)
if node.right:
stack1.append(node.right)
odd = 1-odd
return result