zoukankan      html  css  js  c++  java
  • [leetcode]Binary Tree Inorder Traversal @ Python

    原题地址:http://oj.leetcode.com/problems/binary-tree-inorder-traversal/

    题意:二叉树的中序遍历。这道题用递归比较简单,考察的是非递归实现二叉树中序遍历。中序遍历顺序为:左子树,根,右子树。如此递归下去。

    解题思路:假设树为:

                    1

                   /   

                   2    3

                   /     /  

                   4     5  6    7

    我们使用一个栈来解决问题。步骤如下:

        一,我们将根节点1入栈,如果有左孩子,依次入栈,那么入栈顺序为:1,2,4。由于4的左子树为空,停止入栈,此时栈为{1,2,4}。

        二,此时将4出栈,并遍历4,由于4也没有右孩子,那么根据中序遍历的规则,我们显然应该继续遍历4的父亲2,情况是这样。所以我们继续将2出栈并遍历2,2存在右孩子,将5入栈,此时栈为{1,5}。

        三,5没有孩子,则将5出栈并遍历5,这也符合中序遍历的规则。此时栈为{1}。

        四,1有右孩子,则将1出栈并遍历1,然后将右孩子3入栈,并继续以上三个步骤即可。

        栈的变化过程:{1}->{1,2}->{1,2,4}->{1,2}->{1}->{1,5}->{1}->{}->{3}->{3,6}->{3}->{}->{7}->{}。

    代码:

    # Definition for a  binary tree node
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        # @param root, a tree node
        # @return a list of integers
        def iterative_inorder(self, root, list):
            stack = []
            while root or stack:
                if root:
                    stack.append(root)
                    root = root.left
                else:
                    root = stack.pop()
                    list.append(root.val)
                    root = root.right
            return list
                    
        def recursive_inorder(self, root, list):
            if root:
                self.inorder(root.left, list)
                list.append(root.val)
                self.inorder(root.right, list)
            
        def inorderTraversal(self, root):
            list = []
            self.iterative_inorder(root, list)
            return list
  • 相关阅读:
    异步请求模板和数据
    关于线上js报错问题的思考
    标准web浏览器的组件
    监控图片加载的方法
    图片轮播
    jQuery的一些小技巧()
    setTimeout/setInterval伪异步
    linux/windows java jdk环境配置
    iOS pod 第三方 unrecognized selector sent to instance
    上海4
  • 原文地址:https://www.cnblogs.com/zuoyuan/p/3720273.html
Copyright © 2011-2022 走看看