1 """ 2 Given a binary tree, return the inorder traversal of its nodes' values. 3 Example: 4 Input: [1,null,2,3] 5 1 6 7 2 8 / 9 3 10 Output: [1,3,2] 11 """ 12 """ 13 中序遍历题 14 解法一递归 15 """ 16 class TreeNode: 17 def __init__(self, x): 18 self.val = x 19 self.left = None 20 self.right = None 21 22 class Solution1: 23 def inorderTraversal(self, root): 24 if root == None: 25 return [] 26 else: 27 List = [] 28 self.order(root, List) #bug,刚开始没有把List传进去 29 return List 30 def order(self, root, List): 31 if root.left: 32 self.order(root.left, List) 33 List.append(root.val) 34 if root.right: 35 self.order(root.right, List) 36 """ 37 解法二:非递归 38 栈 思路: 39 (1)树先一直向左走到叶节点并将沿途的结点入栈 ; 40 (2)然后向右走一步,重复第一步操作。 41 注意要将沿途的节点进行入栈 42 """ 43 class TreeNode: 44 def __init__(self, x): 45 self.val = x 46 self.left = None 47 self.right = None 48 class Solution2(object): 49 def inorderTraversal(self, root): 50 """ 51 :type root: TreeNode 52 :rtype: List[int] 53 """ 54 if root == None: 55 return [] 56 List = [] 57 stack = [] 58 while root or stack: 59 if root: 60 stack.append(root) 61 root = root.left 62 else: 63 root = stack.pop(-1) 64 List.append(root.val) 65 root = root.right 66 return List 67 if __name__ == '__main__': 68 S = Solution2() 69 l1 = TreeNode(1) 70 l2 = TreeNode(2) 71 l3 = TreeNode(3) 72 l4 = TreeNode(4) 73 l5 = TreeNode(5) 74 l6 = TreeNode(6) 75 l7 = TreeNode(7) 76 root = l1 77 l1.left = l2 78 l1.right = l3 79 l2.left = l4 80 l2.right = l5 81 l3.left = l6 82 l3.right = l7 83 print(S.inorderTraversal(root))