题目:
给定一个二叉树,返回它的中序 遍历。
示例:
输入: [1,null,2,3]
1 \ 2 / 3
输出: [1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
解法一:
利用栈+迭代进行中序遍历,主要分为以下几种情况:
(设立一个标志T,T=0时,当前节点的左子树未遍历,T=1时,左子树遍历)
1.当前节点有左子树且未遍历->节点暂存于栈,遍历左子树;
2.当前节点无左子树或左子树已遍历:->输出当前节点,并判断是否有右子树:
1)无右子树,返回上一节点,T=1;
2)有右子树,遍历右子树,T=0;
# 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]:
stack = ['0']
T = 0
L = []
x = root
if(x == None):
return L
while(stack):
# print(stack)
if(x.left!=None and T==0):
stack.append(x)
x = x.left
continue
if(x.left == None or T == 1):
L.append(x.val)
if(x.right == None):
x = stack.pop()
T = 1
else:
x = x.right
T = 0
return L