【Leetcode】257 Binary Tree Paths 二叉树的路径
来源:互联网 发布:电脑数据怎么恢复 编辑:程序博客网 时间:2024/05/22 00:31
【Leetcode】257 Binary Tree Paths 二叉树的路径
题目
Given a binary tree, return all root-to-leaf paths.
For example, given the following binary tree:
1 / \2 3 \ 5
All root-to-leaf paths are:
[“1->2->5”, “1->3”]
思路
实现
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public List<String> binaryTreePaths(TreeNode root) { List<String> paths = new LinkedList<>(); if (root == null) return paths; String path = ""; binaryTreePaths(root, paths, path); return paths; } private void binaryTreePaths(TreeNode root, List<String> paths, String path) { if (root == null) return; // 叶子结点,路径中的末尾结点,是专有的 if (root.left == null && root.right == null){ if ("".equals(path)) path += root.val; else path += "->" + root.val; paths.add(path); return; } // 根结点到当前结点的路径,为其左右子结点公有的路径 if ("".equals(path)) path += root.val; else path += "->"+root.val; binaryTreePaths(root.left, paths, path); binaryTreePaths(root.right, paths, path); }}
对比题目——二叉树中和为某一值的路径
package foroffer.top30;import java.util.Stack;/** * Created by liyazhou on 2017/5/28. * 面试题25:二叉树中和为某一值的路径 * * 题目: * 输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。 * 从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树的定义如下: * * 问题: * 1. 前序遍历二叉树 * 2. 栈 * * 思路: * 1. 前序遍历二叉树,并把当前结点的值入栈 * 如果当前结点是叶子结点,判断栈中的所有元素之和是否为指定值,如果是,则输出该路径,否则不操作 * 如果当前结点的左孩子不是叶子结点,则前序遍历以该结点的左孩子为根结点的子树 * 如果当前结点的右孩子不是叶子结点,则前序遍历以该结点的右孩子为根结点的子树 * * 在返回到父结点之前,在路径上删除当前节点(从栈中弹出该结点) * */class TreeNode25{ int value; TreeNode25 left; TreeNode25 right; public TreeNode25(int value){ this.value = value; } public void setChildren(TreeNode25 left, TreeNode25 right){ this.left = left; this.right = right; }}public class Test25 { public static void findPath(TreeNode25 root, int expectedSum){ if (root == null) return; Stack<Integer> stack = new Stack<>(); findPath(root, stack, expectedSum); } /** * 查找符合条件的路径 * 前序遍历二叉树 * @param root 二叉树的根结点 * @param stack 存储结点的值 * @param expectedSum 路径上各个元素之和的期望值 */ private static void findPath(TreeNode25 root, Stack<Integer> stack, int expectedSum){ // 前序遍历的操作 stack.push(root.value); // 当前结点为叶子结点时,判断从根结点到该叶子结点的路径上所有元素的值之和 if (root.left == null && root.right == null){ int sum = 0; // for(int i = 0; i < stack.size(); i++) sum += stack.get(i); for (int value : stack) sum += value; if (sum == expectedSum) System.out.println(stack); } // 对当前结点的左孩子的递归操作 if (root.left != null) findPath(root.left, stack, expectedSum); // 对当前结点的右孩子的递归操作 if (root.right != null) findPath(root.right, stack, expectedSum); // todo, 返回到父结点之前,在路径上删除当前结点 stack.pop(); } public static void main(String[] args){ TreeNode25 root = generateTree(); findPath(root, 22); } private static TreeNode25 generateTree() { TreeNode25 node0 = new TreeNode25(10); TreeNode25 node1 = new TreeNode25(5); TreeNode25 node2 = new TreeNode25(12); TreeNode25 node3 = new TreeNode25(4); TreeNode25 node4 = new TreeNode25(7); node0.setChildren(node1, node2); node1.setChildren(node3, node4); return node0; }}
阅读全文
1 0
- 【Leetcode】257 Binary Tree Paths 二叉树的路径
- LeetCode OJ 之 Binary Tree Paths(二叉树路径)
- Binary Tree Paths (二叉树路径遍历)
- lintcode binary-tree-paths 二叉树的所有路径
- 257. Binary Tree Paths 二叉树的路径
- Binary Tree Paths(二叉树的路径)
- 257. Binary Tree Paths | 二叉树的路径
- LeetCode 257 Bianry Tree Paths(二叉树路径保存)
- 【Leetcode】Binary Tree Paths 二叉树根结点到所有叶子结点的路径
- 257.leetcode Binary Tree Paths(easy)[二叉树深度路径遍历]
- Tree----- 257. Binary Tree Paths(二叉树从根节点开始的所有路径)
- 257. Binary Tree Paths(打印二叉树所有路径)
- 257. Binary Tree Paths打印二叉树路径
- [LeetCode] Binary Tree Paths - 二叉树基础系列题目
- Binary Tree Paths 二叉树的路径(含创建树的代码)
- leetcode 257. Binary Tree Paths-树路径|深度搜索
- Binary Tree Paths 二叉树所有从跟节点到叶子节点的路径
- 480.Binary Tree Paths-二叉树的所有路径(容易题)
- disable-output-escaping
- Java实现随机无重复数字功能
- java编程思想笔记-并发之线程协作(一)
- JavaWeb学习总结(一)——JavaWeb开发入门
- UI设计中图形设计详解
- 【Leetcode】257 Binary Tree Paths 二叉树的路径
- 使用JDOM解析XML文件(JDOM解析)
- 关于Eclipse ProjectExplorer下文件的排序问题
- 微信网页开发——随手笔记
- Java加密解密等操作的工具类
- [总结]Java真是博大精深(一)
- form 中Enctype=nultipart/form-data的作用
- laravel笔记-数据库(配置与基础)
- CSS content换行技术实现字符animation loading效果