LeetCode 94. 二叉树的中序遍历(递归)(迭代)(颜色标记法)

题目描述

给定一个二叉树,返回它的后序遍历
在这里插入图片描述

思路

详见链接

代码

递归

#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)

效果

在这里插入图片描述

发布了80 篇原创文章 · 获赞 239 · 访问量 7085

猜你喜欢

转载自blog.csdn.net/weixin_37763870/article/details/104270024