[LeetCode] 94. Binary Tree Inorder Traversal

题: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

猜你喜欢

转载自blog.csdn.net/u013383813/article/details/80901736