题:https://leetcode.com/problems/binary-tree-inorder-traversal/description/
题目
Given a binary tree, return the inorder traversal of its nodes’ values.
Example:
Input: [1,null,2,3]
1
\
2
/
3
Output: [1,3,2]
Follow up: Recursive solution is trivial, could you do it iteratively?
思路
中序遍历,两种方法:
1.resursion 递归,注意访问节点的次序。
2.stack 模拟resursion ,其实也是注意访问次序。模型应该记住。
code
########## recursion ###########
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
def getInorder(root,res):
if root != None:
if root.left != None:
getInorder(root.left,res)
res.append(root.val)
if root.right != None:
getInorder(root.right,res)
class Solution:
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = []
getInorder(root,res)
return res
################# stack ##################
# 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):
"""
:type root: TreeNode
:rtype: List[int]
"""
nodestack = []
res = []
cursor = root
while cursor!=None or len(nodestack)!=0:
while cursor !=None :
nodestack.append(cursor)
cursor = cursor.left
cursor = nodestack.pop(-1)
res.append(cursor.val)
cursor = cursor.right
return res