zoukankan      html  css  js  c++  java
  • LeetCode257. 二叉树的所有路径

    一看就会一写就废(╯﹏╰)

    ☆☆☆方法1:DFS前序遍历。路径是从根开始的, 于是想到前序遍历

    ☆☆☆方法2:BFS层序遍历。

    ☆☆☆☆方法3:递归。

    代码1:

    class Solution {
        public List<String> binaryTreePaths(TreeNode root) {
            List<String> res = new ArrayList<>();
            dfs(root, "", res);
            return res;
        }
        private void dfs(TreeNode root, String path, List<String> res) {
            if (root == null) return;
            //如果是叶子节点,说明找到了一条路径,把它加入到res中
            if (root.left == null && root.right == null) {
                res.add(path + root.val);
                return;
            }
            dfs(root.left, path + root.val + "->",res);
            dfs(root.right,path + root.val + "->" ,res);
        }
    }

    代码2:

    class Solution {
        public List<String> binaryTreePaths(TreeNode root) {
            /**
             * 方法2:BFS层序遍历
             *      维护两个队列,分别存储节点以及根到该节点的路径
             *      如果是叶子节点,则将对应的路径添加到结果中
             */
            List<String> paths = new ArrayList<>();
            if (root == null) return paths;
            Queue<TreeNode> nodeQueue = new LinkedList<>();
            Queue<String> pathQueue = new LinkedList<>();
            nodeQueue.offer(root);
            pathQueue.offer(String.valueOf(root.val));
            while (!nodeQueue.isEmpty()) {
                TreeNode cur = nodeQueue.poll();
                String path = pathQueue.poll();
                // 叶子节点
                if (cur.left == null && cur.right == null) {
                    paths.add(path);
                }else {
                    if (cur.left != null) {
                        nodeQueue.offer(cur.left);
                        pathQueue.offer(new StringBuilder(path).append("->").append(cur.left.val).toString());
                    }
                    if (cur.right != null) {
                        nodeQueue.offer(cur.right);
                        pathQueue.offer(new StringBuilder(path).append("->").append(cur.right.val).toString());
                    }
                }
            }
            return paths;
        }
    }

    代码3:

    class Solution {
        public List<String> binaryTreePaths(TreeNode root) {
            List<String> res = new ArrayList<>();
            if (root == null) {
                return res;
            }
            if (root.left == null && root.right == null) {
                res.add(String.valueOf(root.val));
                return res;
            }
            List<String> leftS = binaryTreePaths(root.left);
            for (String path : leftS) {
                res.add(root.val + "->" + path); // 组成更长的路径
            }
            List<String> rightS = binaryTreePaths(root.right);
            for (String path : rightS) {
                res.add(root.val + "->" + path);
            }
            return res;
        }
    }
  • 相关阅读:
    深信服入职前编码训练21题--02
    深信服入职前编码训练21题--01
    Leetcode本地阅读器开发--01界面设计三
    Leetcode本地阅读器开发--01界面设计二
    Leetcode本地阅读器开发--01界面设计一
    使用DDMS测试安卓手机APP的性能(android)
    在PC上测试移动端网站和模拟手机浏览器的5大方法
    SeleniumIDE与eclipse如何连接使用
    Selenium RC配置
    Selenium IDE- 不同的浏览器
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14180683.html
Copyright © 2011-2022 走看看