方法一:递归。每次把左节点加入到列表中,知道遇到叶节点结束,返回至上一层节点,并查其右节点,以此类推。

 private static List<String> binTreePath1(TreeNode root) {LinkedList<String> l = new LinkedList<String>();if(root==null)return l;//如果为空,返回空getPath(root,l,root.val+"");return l;}private static void getPath(TreeNode root, List<String> re, String s) {if(root.left==null && root.right==null) {//此时为叶节点,把s添加到结果列表中,返回re.add(s+"");return ;}if(root.left!=null)//左子树不为空,递归getPath(root.left,re,s+"->"+root.left.val);if(root.right!=null)//右子树不为空,递归getPath(root.right,re,s+"->"+root.right.val);}

方法二:在方法一的基础之上,不需要借助 getPath 函数。

 //不借用辅助函数private static List<String> binTreePath2(TreeNode root) {LinkedList<String> l = new LinkedList<String>();if(root==null)return l;if(root.left==null && root.right==null) {l.add(root.val+"");return l;}for (String s : binTreePath2(root.left)) {l.add(root.val+"->"+s);}for (String s : binTreePath2(root.right)) {l.add(root.val+"->"+s);}return l;}

方法三:BFS算法应用,建两个队列,一个存储节点,另一存储路径

 //队列BFS算法应用private static List<String> binTreePath3(TreeNode root) {List<String> l=new ArrayList<String>();//结果列表Queue<TreeNode> queueNode = new LinkedList<TreeNode>();//存储节点队列Queue<String> queueStrPath = new LinkedList<String>();//存储路径队列if(root==null)return l;queueNode.add(root);queueStrPath.add("");while(!queueNode.isEmpty()) {TreeNode curNode = queueNode.poll();String curPath = queueStrPath.poll();if(curNode.left==null && curNode.right==null) {l.add(curPath+curNode.val);}if(curNode.left!=null) {queueNode.add(curNode.left);queueStrPath.add(curPath+curNode.val+"->");}if(curNode.right!=null) {queueNode.add(curNode.right);queueStrPath.add(curPath+curNode.val+"->");}}return l;}

最后树定义

public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int x){val = x;};
}

输出二叉树根节点到叶子结点所有路径相关推荐

  1. 找二叉树根节点到叶子结点最长路径

    void Findpath(BiTree T){//后序遍历法寻找从根节点到叶子结点最长路径BiTree stack[MaxSize],path[MaxSize],p=T,r;int top=-1,m ...

  2. [c++]查找二叉树根节点到任意结点的路径

    今天在做leetcode236时受到启发,怎么求二叉树根节点到二叉树任意结点(该节点在二叉树中存在)的路径?当然,前提是二叉树各节点的值不相等. 示例 输入:root = [3,5,1,6,2,0,8 ...

  3. 求二叉树指定结点到根的路径c语言,二叉树根节点到叶子结点和为指定值的路径...

    题目描述 image.png 题解 解题思路与二叉树根节点到叶节点的所有路径和一题相似,都是采用递归算法.但这个题加了一点,要求保存路径到vector中. 为了保存路径,这里给递归函数传递一个vect ...

  4. 输出二叉树中从每个叶子结点到根结点的路径,统计二叉树的度为1的结点个数,二叉树算表达式(C语言)

    1.建立如下图表达式二叉树,并求值. (只涉及加减乘除运算) +*3##4##/8##4## (先序建立表达式) 2.统计二叉树的度为1的结点个数: 3.输出二叉树中从每个叶子结点到根结点的路径. # ...

  5. java计算二叉树的节点最小值_求二叉树根节点到叶子节点路径和的最小值:遍历(递归+非递归)...

    昨晚中兴笔试题,第一题是给定二叉树,每个节点的数据结构是 value,left,right,比较根节点到各个叶子节点路径和的大小,输出路径和的最小值.(补充:用ArrayList可以存储) 以前没做过 ...

  6. java根节点到叶子节点_二叉树根节点到叶子节点的所有路径和

    我觉得这个题目和剑指offer中的一道题目非常相似.先说这个题: 解题思路:从根结点开始,当每访问到一个结点,我们把该结点添加到路径上,并"累加" 该结点的值,这里"累加 ...

  7. leetcode 112 --- 二叉树根节点到叶子节点和为指定值的路径

    1 题目 给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径. 2 解法 用递归的方法,如果当前不是叶子节点,就把sum减去当前的值,并把当前节点当作路径节点pu ...

  8. 二叉树(根节点到任意结点的路径)

    假设二叉树采用二叉链表方式存储, root指向根结点,node 指向二叉树中的一个结点,编写函数 path,计算root到 node 之间的路径,(该路径包括root结点和 node 结点).path ...

  9. 输出二叉树中从每个叶子结点到根结点的路径

    算法 void AllPath(BiTNode *p, TElemType *data, int len) {if (p){if (p->lchild == NULL && p- ...

最新文章

  1. java中将int转换float_在java中将float和double转换为int时有什么区别?
  2. date日期相减 java_03时间日期类
  3. Spring Cloud微服务实战pdf
  4. 前端如何获取联通积分_怎么利用定制的小程序来获取流量
  5. MasterPage技术
  6. 数据库SQL语言从入门到精通--Part 2--MySQL安装
  7. wordpress致命错误怎么解决_pppoe错误是什么意思 pppoe错误怎么解决
  8. Spark_UDAF
  9. Kubernetes-保障集群内节点和网络安全
  10. teechart绘制实时曲线_基于OpenCV的显著图绘制
  11. Cocos2d-x中常用的类
  12. Windows exe文件如何提取图标
  13. unity3d + lua + 斗地主 系列 (2) 创建扑克规则
  14. 1984年图灵奖--尼克劳斯·沃思简介
  15. Excel添加固定文本到开头的2种操作方法
  16. 微信小程序太阳落日效果
  17. 如何取消OPPOA33Android系统,OPPO A33系统降级教程_OPPO A33怎么回退到原来旧版本的系统...
  18. java esc_java里控制台按esc键退出,怎么实现
  19. aliyun - ddns
  20. java nginx 重启吗_nginx(二) : 启动、重启、停止

热门文章

  1. 配置修改Nginx支持 PATHINFO
  2. .net 4 环境调用 .net 2 编译的DLL
  3. 用c#控制台模拟双色球随机选
  4. 求出给定节点在二叉排序树中的层次
  5. 诗与远方:无题(八十一)
  6. SpringBoot集成MyBatis-Plus代码生成器(Dao)
  7. webpack 编译stylus_webpack 文档更新日志(9.12-9.29)
  8. 《Python分布式计算》 第8章 继续学习 (Distributed Computing with Python)
  9. express不是内部或外部命令,也不是可运行的程序或批处理文件
  10. javascript 面试题之一