给定一个数组存储的二叉树,求根节点到最小叶子节点的路径

描述:

        以数组来存储二叉树,现给定一个数组
        树的根节点的值储存在下标1, 对于储存在下标n的节点,
        他的左子节点和右子节点分别储存在下标2*n和2*n+1
        并且我们用-1代表一个节点为空
        试求从根节点到最小叶子节点的路径,路径由节点的值组成

思路:

  1.  将给定的数组先转换为二叉树,转换时添加一个向上的parent指针指向父节点   
  2. 层序遍历所有节点,找出最小的叶节点(左右孩子为空的节点则为叶子节点)     
  3. 以最小节点开始通过parent指针将沿途的所有结点push栈,逆序打印即可

 第一步. 根据给定的数组生成二叉树(将字符串切分,0不可用)

String str = "0 5 9 8 -1 -1 7 -1 -1 -1 -1 -1 6 3";
String str = "0 3 5 7 -1 -1 2 4";
    public static Node generateTree(String[] arr){
        if(arr == null || arr.length == 0){
            return null;
        }
        Node head = generateNode(arr[1]);
        Queue<Node> queue = new LinkedList<>();
        queue.add(head);
        HashMap<Node,Integer> map = new HashMap<>();
        map.put(head,1);
        while (!queue.isEmpty()){
          
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值