微软面试4、在二元树中找出和为某一值的所有路径
题目:输入一个整数和一棵二元树。
从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。
打印出和与输入整数相等的所有路径。
例如 输入整数22和如下二元树
10
/ /
5 12
/ /
4 7
则打印出两条路径:10, 12和10, 5, 7。
思路1:(这个感觉不是最好的,看到的欢迎分享新方法)
后续遍历二叉树,同时用一个变量sum记录栈中所有节点的和,当节点输出时,判断该节点是否是叶子节点,同时sum是否是目标和
若两者均满足,则测试栈中的元素即是一条路径。
代码:
1 View Code 2 void PathSum(BiTree BT,int SUM){ 3 Stack tag;//标记栈 4 Stack S;//树节点栈 5 Stack temp;//用来输出的 6 int sum=0; 7 BinTree p=BT; 8 while(p!=NULL||!isEmptyStack(S)){ 9 while(p!=NULL){ 10 Push(S,p); 11 sum+=p->data; 12 Push(tag,0); 13 p=p->lchild; 14 } 15 if(Top(tag)==1){ 16 p=Top(S) 17 if(sum==SUM&&p->lchiled==NULL&&prchild==NULL){ 18 while(isEmptyStack(S)){ 19 push(temp,Top(S)); 20 pop(S); 21 } 22 while(isEmptyStack(temp)){ 23 BinTree x=Top(temp); 24 printf("%d",x->data); 25 push(S,x); 26 pop(temp); 27 } 28 } 29 BinTree x=Top(S); 30 Sum-=x->data; 31 Pop(S); 32 Pop(tag); 33 p=NULL; 34 }else{ 35 p=Top(S); 36 p=p->rchild; 37 Top(tag)->data=1; 38 } 39 } 40 }
思路2:深度优先搜索,用队列保存节点(这个暂时写不出来代码,看完深度优先搜索后给出)
转载于:https://www.cnblogs.com/GoAhead/archive/2012/05/24/2516650.html
微软面试4、在二元树中找出和为某一值的所有路径相关推荐
- 微软面试题系列(四):在二元树中找出和为某一值的所有路径
有了第一题作为基础,这一题写起来也相当简单.只是搜索的时候呢,可以剪枝一下.这个是搜索的技巧,用多了就自然有这个习惯了! 建树依然建立二元查找树,然后用深搜,用一个path数组把结点的值存储起来.用深 ...
- 在二元树中找出和为某一值的所有路径
具体实现代码如下: BSTree.h具体内容: #ifndef _BSTREE_H_ #define _BSTREE_H_ typedef struct _tagBSTreeNode {int m_n ...
- IT公司100题-4-在二元树中找出和为某一值的所有路径
2019独角兽企业重金招聘Python工程师标准>>> 问题描述: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等 ...
- 二叉树路径和最大python_python3实现在二叉树中找出和为某一值的所有路径(推荐)...
请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径. 规则如下: 1.从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设置的某一值的相同,那么输出这条 ...
- 算法-二分搜索-找出最大值和次大值
二分搜索 <2>找出最大值和第二大值 时间复杂度O(n) class Program {static void Main(string[] args){List<int> li ...
- 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径, 使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。
#include <iostream> #include <vector> using namespace std;/* 给定一个包含非负整数的 m x n 网格,请找出一条从 ...
- C语言 输入一个5行5列的数组。1.求数组主对角线上元素的和。2.求出辅对角线上元素的积。3.找出主对角线上最大的值及其位置
C语言 输入一个5行5列的数组.1.求数组主对角线上元素的和.2.求出辅对角线上元素的积.3.找出主对角线上最大的值及其位置 主对角线是什么: 在一个n阶方阵(或是n阶行列式)中,从左上角到右下角这一 ...
- 微软推出可酿酒的AI 找出风味最佳的威士忌组合
微软.芬兰科技公司Fourkind和瑞典威士忌酒厂Mackmyra正在制造全世界第一款AI制作的威士忌,预计将于今年秋天上市,微软将AI技术,用于自动化威士忌制作过程中最耗时的部分,从众多成分配方和酒 ...
- Excel VBA 找出选定范围不重复值和重复值
找出不重复值 Sub 找出选定范围内不重复的值()On Error Resume NextDim d As ObjectSet d = CreateObject("scripting.dic ...
- 微软面试题:写程序找出二叉树的深度
一个树的深度等于max(左子树深度,右子树深度)+1.可以使用递归实现. int DepthOfTree(BiTreeNode* root) {if(NULL == root){return 0;}r ...
最新文章
- mssql语句精华指令
- Angular core.js executeTemplate
- [数论]线性筛——约数个数与约数和
- 【java】Java 原子性、有序性与Happens-Before
- JAVA设置输入数据范围,如何使用Apache POI(SXSSF)为特定单元格设置数据(数字)格式区域设置?...
- Java中Spring中的方法加上try catch后事务管理器失效无法回滚的情况
- Android组件化demo实现以及遇坑分享
- 大数据技术对互联网的影响
- Enterprise Library 2.0 Hands On Lab 翻译(15):加密应用程序块(二)
- 如何找出电脑里的流氓软件_可怕:正版的流氓软件,100个人的电脑里99台都安装了...
- 超算与湍流的直接数值模拟
- 信息安全工程师自学笔记(1)
- qt 雷达扫描障碍物_激光雷达Lidar与毫米波雷达Radar:自动驾驶的利弊
- Unity中location和rotation赋值和更改
- 基于Matlab的压力控制论文,基于Matlab的压力容器螺栓组联接优化设计的论文
- 2021最新Android开发者学习路线,已整理成文档
- 广东省计算机二级c语言真题,广东省计算机二级考试题及答案
- 手机wifi显示未连接服务器,客户端显示wifi未连接到服务器
- 长时间戴耳机选哪一种、目前最好用的骨传导耳机品推荐
- ES6的三种暴露方式