题解 | #二叉树遍历#

二叉树遍历

https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef

思路

1.根据前序遍历的字符串,创建二叉树,再通过创建的二叉树,打印中序遍历

2.给了前序遍历,可以找到根节点的位置

3.#代表空树,空节点是指定的,因此可以创建唯一二叉树

4.前序遍历,先创建根节点,如果遇到#,返回的同时用子节点接收

5.因为要递归,所以不采用循环来遍历字符串,设置一个静态成员变量i

6.读取字符串中i位置的字符,如果不是#,根据取到的值创建根节点,i++;

7.先创建左子树,再创建右子树,根节点为空时返回,根节点的左右分别指向返回值

8.如果遇到#,i++,返回的结点为null

9.利用中序遍历打印

    public char val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(char val){
        this.val = val;
    }

}
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) { // 
           String str = in.nextLine();
           TreeNode root = creatTree(str);
           inorder(root);
        }
    }
    public static int i = 0;//i记录读取的字符
    public static TreeNode creatTree(String str){//创建二叉树
        TreeNode root = null;
       if(str.charAt(i)!='#'){
        root = new TreeNode(str.charAt(i));
        i++;//创建完根节点后,i++,先创建左树,再创建右树
        root.left = creatTree(str);
        root.right = creatTree(str);
       }else{
        i++;//如果是#,i++跳过
       }
        return root;//返回root,i是#时,返回空,i不是#时,返回结点,让root指向对应结点
    }
    public static void inorder(TreeNode root){
        if(root==null){//中序遍历打印
            return;
        }
        inorder(root.left);
        System.out.print(root.val+" ");
        inorder(root.right);
    }
}
全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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