题解 | #实现二叉树先序,中序和后序遍历#

实现二叉树先序,中序和后序遍历

http://www.nowcoder.com/practice/a9fec6c46a684ad5a3abd4e365a9d362

非递归算法Java语言版

import java.util.*;

/*

  • public class TreeNode {
  • int val = 0;
  • TreeNode left = null;
  • TreeNode right = null;
  • } */

public class Solution { /** * * @param root TreeNode类 the root of binary tree * @return int整型二维数组 */

ArrayList<Integer> list1=new ArrayList<Integer>();
ArrayList<Integer> list2=new ArrayList<Integer>();
ArrayList<Integer> list3=new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
public int[][] threeOrders (TreeNode root) {
    // write code here 用递归实现,前序,中序,后续,本次采用非递归方法实现
    
    preOrder(root);
    inOrder(root);
    postOrder(root);
    res.add(list1);
    res.add(list2);
    res.add(list3);
    int[][] ans=new int[3][list1.size()];
    for(int i=0;i<list1.size();i++){
        ans[0][i]=list1.get(i);
        ans[1][i]=list2.get(i);
        ans[2][i]=list3.get(i);
    }
    return ans;
}
public void preOrder(TreeNode root){
    if(root==null) return;
    LinkedList<TreeNode> list=new LinkedList<>();
    TreeNode p=root;
    list.push(p);
    while(list.size()>0){
        p=list.peek();
        list.pop();
        list1.add(p.val);
        if(p.right!=null) list.push(p.right);
        if(p.left!=null) list.push(p.left);
    }
    return;
}
public void inOrder(TreeNode root){
    if(root==null) return;
    LinkedList<TreeNode> list=new LinkedList<>();
    TreeNode p=root;
    while(list.size()>0||p!=null){
        while(p!=null){
            list.push(p);
            p=p.left;
        }
        p=list.peek();
        list2.add(p.val);
        list.pop();
        p=p.right;
    }
    return;
}
public void postOrder(TreeNode root){
    if(root==null) return;
    LinkedList<TreeNode> list=new LinkedList<>();
    TreeNode p=root,last=null;
    while(list.size()>0||p!=null){
        while(p!=null){
            list.push(p);
            p=p.left;
        }
        p=list.peek();
        if(p.right==null||last==p.right){
            list.pop();
            list3.add(p.val);
            last=p;
            p=null;
        }else{
            p=p.right;
        }
   }
   return;
}

}

全部评论

相关推荐

昨天 17:14
中北大学 Java
兄弟们是真是假
牛客46374834...:我在boss上投java岗从来没成功过
点赞 评论 收藏
分享
鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
实习吐槽大会
点赞 评论 收藏
分享
06-19 19:06
门头沟学院 Java
点赞 评论 收藏
分享
大方的大熊猫准备进厂:1.教育背景:你希望从事什么专业的工作你的主修课就是什么;成绩优秀是你应该做的,没什么可描述的,成绩不优秀也许人家在大学忙着创业呢?(成绩优秀不一定是好事,只能说明多元化的大学你上成了高中,没有真正上明白大学,反而体现了你死板,不爱社交,没有别的突出能力) 2.实践经历:你想表达的意思没有说清楚。你是说你会个性化服务,还是你有实习经历。如果没有带来,经济收益,表彰,更好的发展前景,那你还不如说说提升了自己哪些技能。你说有人给你送锦旗我都能明白你优秀,但是你说你会xxxx,你说这话谁信,证据呢。 3.入伍经历:你描述的就是你的工作职责或者你应该做的,并没有体现出来你把这个事情做好了,而且入伍经历并不能证明你能干好你要应聘的工作,不如只写经历其余所有内容都不写。 4.荣誉技能:重点突出一下,但不要过多描述,这些荣誉的含金量懂得都懂。 重点:你要应聘什么工作(具体岗位,实习生不具体),你的期望薪资
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务