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

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

http://www.nowcoder.com/questionTerminal/566f7f9d68c24691aa5abd8abefa798c


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @描述:遍历二叉树
 * @思路:
 * @复杂度:
 * @链接: https://www.nowcoder.com/practice/566f7f9d68c24691aa5abd8abefa798c
 */
 class TraversalBinaryTree {


    public static void preOrderTraversal(TreeNode root) {
        if(root==null) {
            return;
        }
        System.out.print(root.value + " ");
        if (root.left != null) {
            preOrderTraversal(root.left);
        }
        if (root.right != null) {
            preOrderTraversal(root.right);
        }
    }


    public static void inOrderTraversal(TreeNode root) {
        if (root.left != null) {
            inOrderTraversal(root.left);
        }
        System.out.print(root.value + " ");
        if (root.right != null) {
            inOrderTraversal(root.right);
        }
    }

    public static void postOrderTraversal(TreeNode root) {
        if(root==null) {
            return;
        }
        if (root.left != null) {
            postOrderTraversal(root.left);
        }
        if (root.right != null) {
            postOrderTraversal(root.right);
        }
        System.out.print(root.value + " ");
    }




}


public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] firstRow = in.readLine().split(" ");
        int row = Integer.parseInt(firstRow[0]);
        String[] nodeValueArr =  new String[row * 3];

        TreeNode root = TreeUtils.makeBinaryTreeByInput(in);
//        System.out.println("先序遍历:");
        TraversalBinaryTree.preOrderTraversal(root);
//        System.out.println("\n" + "中序遍历:");
        System.out.println();
        TraversalBinaryTree.inOrderTraversal(root);
//        System.out.println("\n" + "后序遍历:");
        System.out.println();
        TraversalBinaryTree.postOrderTraversal(root);
    }

}





class TreeUtils {

    private static TreeNode root;


    /**
     * 采用递归的方式创建一颗二叉树
     *    n 行每行三个整数 fa,lch,rch,
     *    表示 fa 的左儿子为 lch,右儿子为 rch。(如果 lch 为 0 则表示 fa 没有左儿子,rch同理)
     * 构造后是二叉树的二叉链表表示法
     */
    //创建一个树的结点
    public static TreeNode<String> makeBinaryTreeByInput(BufferedReader in) throws Exception{
        String[] nodeVals = in.readLine().split(" ");
        //数组中第一个数是根节点
        TreeNode<String> node = new TreeNode<>(nodeVals[0]);
        //通过递归确定了层数
        if (!"0".equals(nodeVals[1])) {
            node.left = makeBinaryTreeByInput(in);
        }
        if (!"0".equals(nodeVals[2])) {
            node.right = makeBinaryTreeByInput(in);
        }
        return node;
    }


}



 class TreeNode<T> {
   public T value;
   public TreeNode<T> left;
   public TreeNode<T> right;

    public TreeNode(T value) {
        this.value = value;
    }

    public TreeNode( ) {
    }

    public TreeNode(TreeNode left, T value, TreeNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}


全部评论

相关推荐

小厂面经,也是我的处女面(30min)1.自我介绍2.spring&nbsp;boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring&nbsp;task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务