首页 > 其他分享 >二叉树的所有路径(所有从根节点到叶子节点的路径)-257

二叉树的所有路径(所有从根节点到叶子节点的路径)-257

时间:2024-09-15 17:26:35浏览次数:8  
标签:遍历 temp 路径 List 二叉树 root 节点 result

题目描述

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。

解题思路

这道题我们采用二叉树里的前序遍历方式,我们要遍历所有到叶子节点的路径,我们采用复用的思想,就是让这里的几个数据结构我们可以重复使用,但是重复使用也就带来数据不一致的情况,我们用一个temp集合来存储遍历路上遇到的元素,但是这里的元素我们肯定是要变化的,你遍历了左叶子节点,那下次你遍历右叶子节点的时候你就要把左叶子节点的值给从我们这个temp集合中去除,所以这里就体现了回溯的思想,一层一层的往上回溯,直到最后回溯的只剩下了根节点,然后再同样的方法去遍历根节点的右子树。

代码实例

class Solution {
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> result = new ArrayList<>();
        List<Integer> temp = new ArrayList<>();
        travel(root, temp, result);
        return result;
    }

    public void travel(TreeNode root, List<Integer> temp, List<String> result) {

        temp.add(root.val);
        if (root.left == null && root.right == null) {
            result.add(zhuanhua(temp));
            return;
        }

        if (root.left != null) {
            travel(root.left, temp, result);
            //这里就是回溯的思想,先让底下的节点一层一层遍历然后回溯去除相应的值,再到这里的根节点就只剩下了根节点,然后就可以去遍历右子树了
            temp.remove(temp.size()- 1);
        }
        
        if (root.right != null) {
            travel(root.right, temp, result);
            temp.remove(temp.size()- 1);
        }
    }
    
    public String zhuanhua(List<Integer> num) {
        String sl = "";
        for (int i = 0; i < num.size(); i++) {
            if (i != num.size() - 1) {
                sl += (num.get(i) + "->");
            } else {
                sl += num.get(i);
            }
        }
        return sl;
    }

}

标签:遍历,temp,路径,List,二叉树,root,节点,result
From: https://www.cnblogs.com/dfj-blog/p/18415430

相关文章

  • C++: 二叉树进阶面试题
    做每件事之前都心存诚意,就会事半功倍.目录前言1.根据二叉树创建字符串2.二叉树的层序遍历Ⅰ3.二叉树的层序遍历Ⅱ4.二叉树的最近公共祖先5.二叉搜索树与双向链表6.根据一棵树的前序遍历与中序遍历构造二叉树7.根据一棵树的中序遍历与后序遍历构造二叉树8.二......
  • Field D* 路径规划
    D*算法D*算法是用于路径规划的增量式搜索算法,旨在解决在环境中有障碍物动态变化时的路径规划问题。D*算法的主要思想是在每次环境状态变化时,只更新受影响的部分路径,而不必重新规划整个路径。D*算法的核心概念包括:代价函数:通常包括实际代价函数 g 和备用代价函数 rhs......
  • 二叉树的 Morris 中序遍历
    回顾问题陈述:给定一棵二叉树,实现中序遍历并返回包含其中序序列的数组例如给定下列二叉树:我们按照左、根、右的顺序递归遍历二叉树,得到以下遍历:最终中序遍历结果可以输出为:[3,1,9,2,4,7,5,8,6]MorristrickMorris中序遍历是一种树遍历算法,旨在实现O(1)的空间......
  • 【数据结构和算法实践-树-LeetCode113-路径总和Ⅱ】
    数据结构和算法实践-树-LeetCode113-路径总和Ⅱ题目MyThought代码示例JAVA-8题目给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点输入:root=[5,4,8,11,null,13......
  • 【二叉树的最大深度】带你理解递归奥妙!
    ......
  • Day4||24.两两交换链表中的节点|19.删除链表的倒数第n个结点|面试题:链表相交|142.环形
    24.两两交换链表中的节点题目:24.两两交换链表中的节点-力扣(LeetCode)给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。图解思路首先,虚拟头结点挺方便链表进行增删改操作的。本题操作用到三......
  • k8s中master无法访问NodePort,普通节点可以
    我的是ens33下有两个ip:  移除不想要的ip(不是我们设置的静态ip): 临时(重启后失效):sudoipaddrdel192.168.87.132/24devens33 #删除所有pod让他们再创建 kubectldeletepods--all--all-namespaces 永久(不要dhcp):sudovi/etc/sysconfig/network-scripts/ifcf......
  • 代码随想录 -- 二叉树 -- 二叉搜索树中的众数
    501.二叉搜索树中的众数-力扣(LeetCode)思路:定义一个字典1,key 为二叉树的值,value 为二叉树的值出现的次数。定义一个字典2,key 为二叉树的值出现的次数,value (列表)为二叉树的值。找出字典2中最大的key,返回其 value 即可。 classSolution(object):defcreate......
  • 代码随想录算法 - 二叉树5
    题目1530.二叉搜索树的最小绝对差给你一个二叉搜索树的根节点root,返回树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。示例1:输入:root=[4,2,6,1,3]输出:1示例2:输入:root=[1,0,48,null,null,12,49]输出:1提示:树中节点的数......
  • 代码随想录算法 - 二叉树4
    题目1654.最大二叉树给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大值右边的子数组后缀上构建右子树。返回nums构建的*......