思路:
1. 使用一個棧保存結點(列表實現);
2. 如果結點存在,入棧,然后將當前指針指向左子樹,直到為空;
3. 當前結點不存在,則出棧棧頂元素,並把當前指針指向棧頂元素的右子樹;
4. 棧不為空,循環2、3部。
代碼如下,解決了leetcode94. Binary Tree Inorder Traversal:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
ret = []
stack = []
while root or stack:
while root:
stack.append(root)
root = root.left
if stack:
t = stack.pop()
ret.append(t.val)
root = t.right
return ret