题目描述
给定一个二叉树,返回它的后序遍历
思路
代码
递归
#class TreeNode:
# def __init__(self,x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self,root:TreeNode):
res = []
def helper(root):
if not root:
return
helper(root.left)
res.append(root.val)
helper(root.right)
helper(root)
return res
def stringToTreeNode(input):
input = input.strip()
input = input[1:-1]
if not input:
return None
inputValues = [s.strip() for s in input.split(',')]
root = TreeNode(int(inputValues[0]))
nodeQueue = [root]
front = 0
index = 1
while index < len(inputValues):
node = nodeQueue[front]
front = front + 1
item = inputValues[index]
index = index + 1
if item != "null":
leftNumber = int(item)
node.left = TreeNode(leftNumber)
nodeQueue.append(node.left)
if index >= len(inputValues):
break
item = inputValues[index]
index = index + 1
if item != "null":
rightNumber = int(item)
node.right = TreeNode(rightNumber)
nodeQueue.append(node.right)
return root
list = input("输入:")
b = stringToTreeNode(list)
test = Solution()
test.inorderTraversal(b)
迭代
#class TreeNode:
# def __init__(self,x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def inorderTraversal(self,root:TreeNode):
res = []
if not root:
return res
stack = []
cur = root
while stack or cur:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
res.append(cur.val)
cur = cur.right
return res
def stringToTreeNode(input):
input = input.strip()
input = input[1:-1]
if not input:
return None
inputValues = [s.strip() for s in input.split(',')]
root = TreeNode(int(inputValues[0]))
nodeQueue = [root]
front = 0
index = 1
while index < len(inputValues):
node = nodeQueue[front]
front = front + 1
item = inputValues[index]
index = index + 1
if item != "null":
leftNumber = int(item)
node.left = TreeNode(leftNumber)
nodeQueue.append(node.left)
if index >= len(inputValues):
break
item = inputValues[index]
index = index + 1
if item != "null":
rightNumber = int(item)
node.right = TreeNode(rightNumber)
nodeQueue.append(node.right)
return root
list = input("输入:")
b = stringToTreeNode(list)
test = Solution()
test.inorderTraversal(b)
颜色标记法
class TreeNode:
def __init__(self,x):
self.val = x
self.left = None
self.right = None
class Solution:
def inorderTraversal(self,root:TreeNode):
WHITE , GRAY = 0 , 1
res = []
stack = [(WHITE,root)]
while stack:
(color , node )= stack.pop()
if node :
if color == WHITE:
stack.append((WHITE,node.right))
stack.append((GRAY,node))
stack.append((WHITE,node.left))
else:
res.append(node.val)
return res
def stringToTreeNode(input):
input = input.strip()
input = input[1:-1]
if not input:
return None
inputValues = [s.strip() for s in input.split(',')]
root = TreeNode(int(inputValues[0]))
nodeQueue = [root]
front = 0
index = 1
while index < len(inputValues):
node = nodeQueue[front]
front = front + 1
item = inputValues[index]
index = index + 1
if item != "null":
leftNumber = int(item)
node.left = TreeNode(leftNumber)
nodeQueue.append(node.left)
if index >= len(inputValues):
break
item = inputValues[index]
index = index + 1
if item != "null":
rightNumber = int(item)
node.right = TreeNode(rightNumber)
nodeQueue.append(node.right)
return root
list = input("输入:")
b = stringToTreeNode(list)
test = Solution()
test.inorderTraversal(b)