• 算法与数据结构-树-简单-二叉树的所有路径


    二叉树的所有路径

    题目

    leetcode原题:257. 二叉树的所有路径

    给定一个二叉树,返回所有从根节点到叶子节点的路径。

    说明: 叶子节点是指没有子节点的节点。

    分析

    二叉树的问题,还是遍历的问题。

    考虑题目的要求,每经过一个节点,要把自己加入到链条中,然后走到下一个节点,自然而然可以想到前序遍历

    每次递归都需要获取上一步节点的链路String,如果走到了叶子节点,可以直接把链路加入到resultList中,并返回。

    这样大框架就出来了!

    优化点:方法内部可以使用StringBuilder来进行字符串拼接。

    原本我写的是字符串相加,跑出来需要10ms,改成StringBuilder后,跑结果只需要1ms。

    代码

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
    
        private List<String> resultList = new ArrayList<>();
    
        public List<String> binaryTreePaths(TreeNode root) {
            dfs(root,"");
            return resultList;
        }
    
        private void dfs(TreeNode root,String lastStr){
            if(root == null){
                return;
            }
    
            StringBuilder sb = new StringBuilder(lastStr);
            sb.append(root.val);
            
            if(root.left == null && root.right == null){
                resultList.add(sb.toString());
                return;
            }
            sb.append("->");
            dfs(root.left,sb.toString());
            dfs(root.right,sb.toString());
        }
    }
    
  • 相关阅读:
    二叉树的遍历
    98验证二叉搜索树
    104二叉树的最大深度
    101对称二叉树
    100相同的树
    递归算法
    52N皇后II
    51N皇后
    90子集II
    526优美的排列
  • 原文地址:https://www.cnblogs.com/ging/p/14265222.html
Copyright © 2020-2023  润新知