记录一道神奇的算法题,如何中序遍历一个二叉树。
本文使用python语言,首先给出二叉树数据结构:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
递归法很简单,重复调用当前函数即可:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
# check if root is None
if root is None:
return []
# recursion
left = self.inorderTraversal(root.left)
right = self.inorderTraversal(root.right)
# output
return left + [root.val] +right
但是怎么用迭代法中序遍历,就不是很容易了(在不重复调用当前的函数,使用while、for等循环中序遍历)。
在leetcode题解区有人给出了染色法的解答方案:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
# check if root is None
white, gray = 1