• 二叉树所有路径


    目录

    一、题目

    二、解题思路

    1、所有路径

     2、具体步骤

    三、代码实现

    四、二叉树专题文章专栏


    一、题目

    1、链接:力扣

    2、题目内容:

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

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

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

    二、解题思路

    1、所有路径

    本题所有路径指根节点到所有叶子节点的路径,叶子节点即左右子树均为空,如下图:

    所有路径为:1->2->4、1->3->5

     2、具体步骤

    本题采用先序遍历,需要借助栈这一数据结构来实现,栈具有先进后出这一特点,每次元素入栈时,同时记录将经过该元素的路径也入栈,直到左右子树为空,即根节点到叶子节点路径。

    (1)判断根节点是否为空,为空,直接放回,不为空,根节点入栈,以及对应路径入栈

    (2)栈的前两个元素出栈(即节点+节点对应路径),然后:

            ①若左右子节点都为空,说明该节点为叶子节点,将对应节点路径添加到集合中,栈不为空,跳过②③步判断继续遍历,;

            ②判断右节点是否为空,不为空,节点以及节点对应路径入栈;

            ③判断左子树是否为空,不为空,节点以及节点对应路径入栈;

    (3)重复步骤(2),继续判断是否遍历到叶子节点,节点2出栈

     (4)节点4出栈,重复步骤(2),左右子节点为空,路径添加

     

     (5)节点3出栈,重复步骤(2)

     (6)节点5出栈,重复步骤(2),左右子节点为空,路径添加

     

    (7)栈空,遍历结束,返回路径集合

    三、代码实现

     此时的栈存储类型为Object类型,因为既要存储树节点,又要存储字符串类型的路径

    1. public class t13 {
    2. public class TreeNode {
    3. int val;
    4. TreeNode left;
    5. TreeNode right;
    6. TreeNode() {}
    7. TreeNode(int val) { this.val = val; }
    8. TreeNode(int val, TreeNode left, TreeNode right) {
    9. this.val = val;
    10. this.left = left;
    11. this.right = right;
    12. }
    13. }
    14. public List<String> binaryTreePaths(TreeNode root) {
    15. List<String> result=new ArrayList<>();
    16. if (root==null)
    17. return result;
    18. Stack<Object> stack=new Stack<>();
    19. stack.add(root);
    20. stack.add(root.val+"");
    21. while (!stack.isEmpty()){
    22. String path= (String) stack.pop();
    23. TreeNode node= (TreeNode) stack.pop();
    24. if (node.right==null&&node.left==null)
    25. result.add(path);
    26. if (node.right!=null){
    27. stack.add(node.right);
    28. stack.add(path+"->"+node.right.val);
    29. }
    30. if (node.left!=null){
    31. stack.add(node.left);
    32. stack.add(path+"->"+node.left.val);
    33. }
    34. }
    35. return result;
    36. }
    37. }

    四、二叉树专题文章专栏

    https://blog.csdn.net/weixin_50616848/category_11818403.html

  • 相关阅读:
    2023年总结以及对2024年的展望
    祖冲之序列密码算法高性能硬件实现关键技术研究
    某车联网App 通讯协议加密分析(二) Unidbg手把手跑通
    webpack铺垫
    如何预防最新的Mallox变种malloxx勒索病毒感染您的计算机?
    心跳包
    04.2. 多层感知机的从零开始实现
    操作系统概念 进程
    【附源码】计算机毕业设计JAVA人口老龄化常态下的社区老年人管理与服务平台
    Unity与IOS⭐一、百度语音IOS版Demo调试方法
  • 原文地址:https://blog.csdn.net/weixin_50616848/article/details/125014905