博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IT公司100题-4-在二元树中找出和为某一值的所有路径
阅读量:6066 次
发布时间:2019-06-20

本文共 2291 字,大约阅读时间需要 7 分钟。

hot3.png

问题描述:

输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。

例如输入整数30和如下二元树

 

14

/ \

5 16

/ \

3 11

则打印出两条路径:14, 16 和14, 5, 11。

二元树节点的数据结构定义为:

class BSTreeNode{      BSTreeNode(int x, BSTreeNode lt, BSTreeNode rt){         value = x;         left = lt;         right = rt;      }      int value;      BSTreeNode left;      BSTreeNode right;   }

在遍历树的过程中,使用stack保存所走过的路径。如果当前节点为叶子节点,并且路径和等于输入的整数,则输出路径。如果当前节点不是叶子节点,则递归的访问它的孩子节点。在回溯的过程中,注意路径的出栈。

代码实现:

package oschina.mianshi;/** * @project: oschina * @filename: IT3.java * @version: 0.10 * @author: JM Han * @date: 14:59 2015/10/22 * @comment: Test Purpose * @result: */import java.util.Stack;import static tool.util.*;class BSTree3{   class BSTreeNode{      BSTreeNode(int x, BSTreeNode lt, BSTreeNode rt){         value = x;         left = lt;         right = rt;      }      int value;      BSTreeNode left;      BSTreeNode right;   }   private BSTreeNode root;   private int currentSum;   private Stack
 path;   public BSTree3(){      root = null;      currentSum = 0;      path = new Stack
();   }   public void insert(int value){      root = insert(root, value);   }   private BSTreeNode insert(BSTreeNode t, int x){      if(null == t)         return new BSTreeNode(x, null, null);      if(t.value > x)         t.left = insert(t.left, x);      else if(t.value < x)         t.right = insert(t.right, x);      else         ;//duplicate      return t;   }   public void findPath(int expectSum){      findPath(root, expectSum);   }   private void findPath(BSTreeNode t, int expectSum){      if(null == t)         return;      currentSum += t.value;      path.push(t.value);      boolean isLeaf = (t.left == null && t.right == null);      if(isLeaf && currentSum == expectSum){         printGenericColection(path);      }      if(null != t.left)         findPath(t.left, expectSum);      if(null != t.right)         findPath(t.right, expectSum);      currentSum -= t.value;      path.pop();   }}public class IT3 {   public static void main(String[] args) {      BSTree3 bsTree = new BSTree3();      bsTree.insert(14);      bsTree.insert(5);      bsTree.insert(16);      bsTree.insert(3);      bsTree.insert(11);      bsTree.findPath(30);   }}

代码输出:

145111416

转载于:https://my.oschina.net/jimmyhan/blog/520689

你可能感兴趣的文章
阿里云公共镜像、自定义镜像、共享镜像和镜像市场的区别 ...
查看>>
shadowtunnel v1.7 发布:新增上级负载均衡支持独立密码
查看>>
IdleHandler,页面启动优化神器
查看>>
Java线程:什么是线程
查看>>
mysql5.7 创建一个超级管理员
查看>>
【框架整合】Maven-SpringMVC3.X+Spring3.X+MyBatis3-日志、JSON解析、表关联查询等均已配置好...
查看>>
要想成为高级Java程序员需要具备哪些知识呢?
查看>>
带着问题去学习--Nginx配置解析(一)
查看>>
onix-文件系统
查看>>
java.io.Serializable浅析
查看>>
我的友情链接
查看>>
多线程之线程池任务管理通用模板
查看>>
CSS3让长单词与URL地址自动换行——word-wrap属性
查看>>
CodeForces 580B Kefa and Company
查看>>
开发规范浅谈
查看>>
Spark Streaming揭秘 Day29 深入理解Spark2.x中的Structured Streaming
查看>>
鼠标增强软件StrokeIt使用方法
查看>>
本地连接linux虚拟机的方法
查看>>
iview,用render函数渲染
查看>>
某公司面试java试题之【二】,看看吧,说不定就是你将要做的题
查看>>