给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
<br> 2
/
3
输出: [1,2,3]
思路:递归很简单,这里用迭代法,使用栈模拟计算机中的指令执行情况。
- 先创建一个Command类,存储一个字符串和一个树节点,其中字符串表示什么命令,“go”代表跳转到某个节点,“print”表示打印输出;
- 由于是先序遍历,所以跳转到某个节点时先从栈顶弹出一条命令执行;
- 如果弹出的命令是“print”则append进结果,如果是go命令则先向栈中压入“go” Command中存储的节点的右子节点命令,再压入“go” Command中存储的节点的左子节点命令,最后压入“print” Command中存储的节点的命令;
- 最终返回结果数据即可。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Command(object):
def __init__(self, s, node):
self.s = s
self.node = node
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root == None:
return []
stack = []
result = []
stack.append( Command("go", root) )
while len(stack)!= 0:
command = stack.pop()
if command.s == "print":
result.append(command.node.val)
else:
if command.s == "go" and command.node.right:
stack.append( Command("go", command.node.right) )
if command.s == "go" and command.node.left:
stack.append( Command("go", command.node.left) )
stack.append( Command("print", command.node) )
return result
对于第94题的中序遍历,只需改变入栈顺序即可
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Command(object):
def __init__(self, s, node):
self.s = s
self.node = node
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root == None:
return []
stack = []
result = []
stack.append( Command("go", root) )
while len(stack)!= 0:
command = stack.pop()
if command.s == "print":
result.append(command.node.val)
else:
if command.s == "go" and command.node.right:
stack.append( Command("go", command.node.right) )
stack.append( Command("print", command.node) )
if command.s == "go" and command.node.left:
stack.append( Command("go", command.node.left) )
return result
对于第145题的后序遍历,只需改变入栈顺序即可
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Command(object):
def __init__(self, s, node):
self.s = s
self.node = node
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root == None:
return []
stack = []
result = []
stack.append( Command("go", root) )
while len(stack)!= 0:
command = stack.pop()
if command.s == "print":
result.append(command.node.val)
else:
stack.append( Command("print", command.node) )
if command.s == "go" and command.node.right:
stack.append( Command("go", command.node.right) )
if command.s == "go" and command.node.left:
stack.append( Command("go", command.node.left) )
return result
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://wangjiawei.blog.csdn.net/article/details/103491699