您的位置:首页 > 其它

leetcode_94. Binary Tree Inorder Traversal 二叉树的中序遍历,非递归算法,栈的思想

2016-11-17 20:23 369 查看
题目:

Given a binary tree, return the inorder traversal of its nodes' values.

For example:

Given binary tree 
[1,null,2,3]
,

1
\
2
/
3


return 
[1,3,2]
.

Note: Recursive solution is trivial, could you do it iteratively?

题意:

给定一棵二叉树,返回该二叉树中序遍历的结点值。递归算法太简单,能否用迭代的方法实现?

代码:

# 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]

        """

        

        res = []      #存储返回的结果,即中序遍历二叉树节点的值

        lis = []       #用于存储节点,模拟栈

        

        cur_node = TreeNode(0)

        cur_node = root             #当前节点

        

        while cur_node != None or len(lis) > 0 :          #当遇到叶子节点时,cur_node == None,此时要靠栈非空来重新进行循环

            

            if cur_node != None :             #如果当前节点不空,则入栈,然后继续遍历左孩子

                lis.append(cur_node)

                cur_node = cur_node.left

            

            else :

                cur_node = lis[-1].right          #否则,上一个节点已经没有左孩了,取出栈顶元素(上一个节点),并将cur指向栈顶元素的右孩子,继续进行左根右的遍历

                res.append(lis[-1].val)       #记录栈顶节点的val值

                lis.pop()                   #删除栈顶元素          

        

        return res

                

                

  笔记:

1、可能非递归算法没有递归算法那么直观。python没有栈的概念,可以用list模拟栈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: