首页 > 其他分享 >leetcode 257. 二叉树的所有路径

leetcode 257. 二叉树的所有路径

时间:2024-07-06 19:30:54浏览次数:16  
标签:路径 res leetcode 257 二叉树 path null root 节点

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

叶子节点 是指没有子节点的节点。

 

示例 1:

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

示例 2:

输入:root = [1]
输出:["1"]

java 解题思路及代码实现 递归法

package com.java.leetcode.tree;

import com.java.leetcode.compent.TreeNode;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
 *
 * 叶子节点 是指没有子节点的节点。
 *
 *
 * 示例 1:
 *
 *
 * 输入:root = [1,2,3,null,5]
 * 输出:["1->2->5","1->3"]
 * 示例 2:
 *
 * 输入:root = [1]
 * 输出:["1"]
 */

public class binaryTreePaths257 {
    /**
     * 思路:
     *  有题目可得 需要获取二叉树的到叶子结点 所有路径 并返回列表
     *  由于是先处理root节点 再探寻叶子结点 可以使用前序遍历的方式
     *
     *  因此 可以将 将路径存放在list 中使用,但是 list 中存储所有节点不能区分 左右节点怎么办
     *  因此 使用回溯的方式:
     *   由二叉树的特性 叶子结点的路径 只有一个,并且父节点 的下游路径至多只有 两个节点
     *   那么通过前序遍历的逻辑
     *   记录路径节点的值
     *   当处理完 叶子节点并记录到 result list中 之后
     *   path 需要将 该叶子结点删除 去获取父节点 另外子节点的路径
     *   依次 类推 通过 遍历 +回溯的方式记录所有节点路径
     * @param root
     * @return
     */
    public List<String> binaryTreePaths(TreeNode root) {
        List<String> res=new ArrayList<>();
        if(root==null){
            return res;
        }
        List<Integer> path=new ArrayList<>();
        getPath(root,path,res);
        return res;
    }

    /**
     * 递归方式:
     *  1、确定参数:
     *     入参 : root ,路径 path, 结果result
     *     出参 result void 即可
     *  2、确定终止条件
     *
     */
    public void getPath(TreeNode root,List<Integer> path,List<String> res){
        //前序遍历 获取节点值放入path
        path.add(root.val);
        // 判断是否为叶子节点
        // 若为 叶子结点则对 path组装 获取res 字符串
        if(root.left==null&&root.right==null){
           //组合结果
           StringBuffer sb=new StringBuffer();
           for(int i=0;i<path.size()-1;i++){
               sb.append(path.get(i)).append("->");
           }
           // 拼接最后一个节点
           sb.append(path.get(path.size()-1));
           res.add(sb.toString());
           return;
        }
        //左子树
        if(root.left!=null){
            // 处理左子树
            getPath(root.left,path,res);
            // 处理完成获取path 回溯父节点 子节点删除
            path.remove(path.size()-1);
        }
        if(root.right!=null){
            //处理右子树
            getPath(root.right,path,res);
            //获取右子树结果 回溯上一节点
            path.remove(path.size()-1);
        }

    }
}

标签:路径,res,leetcode,257,二叉树,path,null,root,节点
From: https://blog.csdn.net/weixin_42538861/article/details/140234151

相关文章

  • leetcode 102. 二叉树的层序遍历
    给你二叉树的根节点 root ,返回其节点值的 层序遍历 。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]提示:树中节点数目在范围 [0,2000] ......
  • 二叉树的顺序存储
    目录顺序存储:简介:节点的位置关系:优缺点:优点:缺点:二叉树顺序存储的模拟实现:向上调整算法:向下调整算法:二叉树的初始化:直接初始化:建堆初始化:二叉树的头删:二叉树的尾插:二叉树的取顶端元素:二叉树的判空:二叉树的销毁:完整代码:顺序存储:简介:顺序结构存储就是使......
  • leetcode77组合——经典回溯算法
    本文主要讲解组合的要点与细节,以及回溯算法的解题步骤,按照步骤思考更方便理解 c++和java代码如下,末尾给定两个整数 n 和 k,返回范围 [1,n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。 具体要点:1.首先,这道题的暴力解法是k层for循环,遍历所有的......
  • 【LeetCode:3101. 交替子数组计数 + 滑动窗口 + 数学公式】
    ......
  • 代码随想录day15 平衡二叉树 | 二叉树的所有路径 | 左叶子之和 | 完全二叉树的节点个
    平衡二叉树平衡二叉树解题思路二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。这道题由于需要求节点的高度差来进行判断,因此我们需要用后序遍历,先左右,后中间。推荐使用递归把每个节点的高度算出来......
  • Leetcode 1143. Longest Common Subsequence
    ProblemGiventwostringstext1andtext2,returnthelengthoftheirlongestcommonsubsequence.Ifthereisnocommonsubsequence,return0.Asubsequenceofastringisanewstringgeneratedfromtheoriginalstringwithsomecharacters(canbenone......
  • 【leetcode】双指针算法题
    文章目录1.算法思想2.移动零3.复写零方法一方法二4.快乐数5.盛水最多的容器方法一(暴力求解)方法二(左右指针)6.有效三角形的个数方法一(暴力求解)方法二(左右指针)7.两数之和8.三数之和9.四数之和1.算法思想常见的双指针有两种形式,⼀种是左右指针,⼀种是快慢指针。左右......
  • 代码随想录算法训练营第十五天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    110平衡二叉树1classSolution{2public:3intGetHeight(TreeNode*root){4if(!root){5return0;6}7intleftHeight=GetHeight(root->left);8if(leftHeight==-1)ret......
  • python数据结构(树和二叉树)
    树非线性结构一对多根结点(无前驱)多个叶子结点(无后继)其他数据元素(一个前驱,多个后驱)树与二叉树转换树与二叉树均可用二叉链表作为存储结构,则以二叉链表为媒介可导出树之间的一个对应关系-----即给定一颗树,可以找到唯一一颗二叉树与之对应。把树转化为二叉树步骤一:加线......
  • 代码随想录算法训练营第十四天| 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大
    二叉树学习2226题翻转二叉树,改一下前序递归遍历,每次遍历的时候都调换一下左右结点即可。classSolution{public:voidpreorder(TreeNode*root){if(root==nullptr){return;}TreeNode*tmp;tmp=root->left;......