按之字行打印二叉树(栈)
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
通过pop和append两个内置函数实现数组构建栈,通过循环添加实现功能
# -*- coding:utf-8 -*-
# class TreeLinkNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# self.next = None
class Solution:
def GetNext(self, pNode):
# write code here
# 寻找右子树,如果存在就一直找到右子树的最左边就是下一个结点
# 没有右子树,就寻找其父节点一直找到它是父节点的左子树然后打印父节点
if pNode.right:
tmpNode = pNode.right
while tmpNode.left:
tmpNode = tmpNode.left
return tmpNode
else:
tmpNode = pNode
while tmpNode.next:
if tmpNode.next.left == tmpNode:
return tmpNode.next
tmpNode = tmpNode.next
return None
把二叉树打印成多行(队列)
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
# -*- 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
if pRoot == None:
return []
queue1 = [pRoot]
queue2 = []
ret = []
while queue1 or queue2:
if queue1:
tmpRet = []
while queue1:
tmpNode = queue1[0]
tmpRet.append(tmpNode.val)
del queue1[0]
if tmpNode.left:
queue2.append(tmpNode.left)
if tmpNode.right:
queue2.append(tmpNode.right)
ret.append(tmpRet)
if queue2:
tmpRet = []
while queue2:
tmpNode = queue2[0]
tmpRet.append(tmpNode.val)
del queue2[0]
if tmpNode.left:
queue1.append(tmpNode.left)
if tmpNode.right:
queue1.append(tmpNode.right)
ret.append(tmpRet)
return ret