码迷,mamicode.com
首页 > 其他好文 > 详细

二叉树的中序遍历(简单)

时间:2017-12-23 17:18:55      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:public   非递归   back   normal   integer   color   数据   .net   this   

复习一下二叉树的各种遍历

前序遍历:根节点->左节点->右节点

中序遍历:左节点->根节点->右节点

后序遍历:左节点->右节点->根节点

样例

给出二叉树 {1,#,2,3},

   1
         2
    /
   3

返回 [1,3,2].

首先还是一样对于二叉树这个结构来说我们用的最多和最容易想到的方法就是递归

下面给出了java的递归版:

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */


public class Solution {
    /*
     * @param root: A Tree
     * @return: Inorder in ArrayList which contains node values.
     */
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> targetList = new LinkedList();
        if(root == null)
            return targetList;
        
        targetList.addAll(inorderTraversal(root.left));
        targetList.add(root.val);
        targetList.addAll(inorderTraversal(root.right));
        
        return targetList;
        
    }
}

上面的代码利用了java的util包下面的LinkedList类 addAll方法就是将另一个集合里面的元素全部都吸收放到自己里面。

递归这个方法非常容易想就是不停的调用自己

然后我自己想了一下怎么用非递归去实现,没有思路,然后上网上查了一些方法,看了之后才晓得懂得巧妙地利用各种数据结构才是最厉害的

非递归方式就是利用堆栈这种数据结构来实现

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param: root: A Tree
    @return: Inorder in ArrayList which contains node values.
    """
    def inorderTraversal(self, root):
        targetList = []#创建目标list
        tempList = []#创建中转存储list
        
        p = root
        
        while len(tempList)!=0 or p is not None:#判断temp是否有元素 还有p是否是空
            if p is not None:#判断左节点是否为空 
                tempList.append(p)#不为空则将当前根节点放入到temp临时list里
                p = p.left
            else:#如果左边的已经走完了
                p = tempList.pop()#出栈并将出栈的结果付给p(根节点)
                targetList.append(p.val)#将p的值放进结果list
                p = p.right#继续遍历p的右子树,按照上述方法再来一遍
                    
        return targetList

上述代码借鉴了  http://blog.csdn.net/zhangxiangdavaid/article/details/37115355 这篇博客

 

二叉树的中序遍历(简单)

标签:public   非递归   back   normal   integer   color   数据   .net   this   

原文地址:http://www.cnblogs.com/KanHin/p/8093372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!