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

bool path(BiTNode* root, BiTNode* node, Stack* s);

其中,root指向二叉树的根结点,node指向二叉树中的另一结点,s 为已经初始化好的栈,
该栈用来保存函数所计算的路径,如正确找出路径,则函数返回 true,此时root在栈底,node在栈顶;
如未找到,则函数返回 false, 二叉树的相关定义如下:

#include "bitree.h" //请不要删除,否则检查不通过
#include <stdio.h>
#include <stdlib.h>bool path(BiTNode* root, BiTNode* node, Stack* s)
{BiTNode *p, *q; // ElemType p;int i = 0;p = root;q = NULL;init_stack(s);if (p == NULL || node == NULL)return false;if (p == node) {push(s, p);return true;}while (p != NULL || !is_empty(s)) {while (p) {push(s, p);//非空就先压进去 if (p == node)//node已经压进去了 return true;p = p->left;//先根遍历 }top(s, &p); //回到分支的根if (p->right == q || p->right == NULL) {q = p;//第一个判断条件很关键, 判是否已经遍历过 pop(s, &p);//左子树前面的while遍历了, 该结点的右子树遍历了或者为空就不要这个节点了 p = NULL; //置空就不会被再次压入 ,过前面的while循环,  等待下一次top赋值, 层次-1//这里指针断了 //需要注意的是p虽然指向该节点但是置空, 该结点任然存在, 并且q结点指向避免再次访问 } else {p = p->right;}}return false;
}

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

  1. 数据结构:(翻转二叉树) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适

    题目 若二叉树采用二叉链表作存储结构,要交换其所有分支结点的左右子树的位置,采用()遍历方法最合适?(北京航空航天大学1999,北京工业大学2016) A. 前序 B. 中序 C. 后序 D. 层次 ...

  2. 设某棵二叉树中度数为 0 的结点数为 N0 ,度数为 1 的结点数为 N1 ,则该二叉树中度数为 2 的结点数为? ;若采用二叉链表作为该二叉树的存储结构,则该二叉树中共有 ? 个空指针域

    度数为 2 的结点数为N0-1:有 2N0+N1个空指针域 分析: 根据总结点数=总度数+1,所以N0+N1+N2=0✘N0+1✘N1+2✘N2+1,得出N2=N0-1,度数为2的结点数就为N0-1 ...

  3. 数据结构C++边学边做--二叉树的实现(二叉链表实现遍历操作)

    二叉树的实现(二叉链表实现遍历操作) 一.二叉树的遍历 二.二叉链表的数据结构定义 三.二叉链表类实现 1.类声明 2.BiTree->构造函数:Create创建二叉链表 3.~BiTree-& ...

  4. 数据结构与算法实验 实验6:二叉树ADT的二叉链式实现 (由完全前序序列创建二叉树 / 求二叉树的节点数/树高/叶子节点数 /先序中序后序层序遍历)

    假设二叉数的数据元素为字符,采用二叉链式存储结构.请编码实现二叉树ADT,其中包括创建二叉树.遍历二叉树(深度.广度).求二叉树的深度(高度).计算二叉树的元素个数.计算二叉树的叶子数.二叉树的格式输 ...

  5. 理论基础 —— 二叉树 —— 二叉链表

    [二叉链表] 二叉树一般采用二叉链表存储,其基本思想是:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针. template<clas ...

  6. C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

    今天写的是二叉树操作的实验,这个实验有三个部分: ①建立二叉树,采用二叉链表结构 ②先序.中序.后续遍历二叉树,输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNo ...

  7. C语言——二叉树的创建(二叉链表)

    1. 引用 递归构造二叉树的过程中用到了 C++ 语言中的引用 &,引用 & 是变量别名的意思,除了变量名不一样,其他的都是指同一个东西.传参的方式有两种:一种是传值:一种是传址.引用 ...

  8. 二叉树的二叉链表存储结构构建以及先序遍历

    #include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 typedef int TElemTy ...

  9. 用二叉链表存储二叉树,并判断二叉树是否为完全二叉树

    题目: 按要求二叉树按二叉链表形式存储, 1.写一个建立二叉树的算法:2.写一个判别给定的二叉树是否是完全二叉树的算法 分析:判断是否是完全二叉树的方法:若某结点无左子女就不应有右子女 建立二叉树[递 ...

最新文章

  1. 基于vue和elementUI封装框选表格组件
  2. 在场景中加入第一人称视角运行后一直往下掉的解决方案
  3. ABAP应用服务器的HTTP响应状态码(Status Code)
  4. 程序日志--要养成好习惯
  5. TFS下的源代码控制
  6. java下载json需要的包_jenkins 获取插件,下载插件提速,配置国内镜像
  7. WIZnet 在 Embedded World 2013展会中的展示
  8. 如何对一个变量数据进行正则判定_数值数据与数值数据的分析
  9. 数值计算(四)——插值法(3)Hermite插值法(补充)
  10. 语音识别(html5+nodejs)
  11. 中科大计算机招非全日制,中国科学技术大学工商管理(非全日制)招生简章
  12. java卡牌游戏详解
  13. 此前小编为大家介绍了女人吃鸡蛋的好处,想必大家对鸡蛋这种蛋类有了更多的了解。今天小编为大家介绍另一种蛋类——鸭蛋。鸭蛋又名鸭卵,是人们经常食用的一种蛋类食品,与鸡蛋营养相当,吃它的好处众多。那么女人吃
  14. Java编写数据统计程序_个人项目--wc文本统计程序(Java实现)
  15. Oulipo HDU - 1686--strlen()耗时啊啊啊--KMP
  16. 学习笔记整理:网络应用技术-计算机网络概论
  17. 如何使用商业图像设计软件ConceptDraw DIAGRAM简化流程图?
  18. head和tail命令
  19. 腾盛博药上市首日破发:获资本热捧,博裕资本为第一大股东
  20. 【信号去噪】基于EMD、EEMD和CEEMDAN算法实现ECG信号去噪附matlab源码

热门文章

  1. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环
  2. 关于nginx为站点绑定域名以及绑定多个域名
  3. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...
  4. 学霸真的比学渣更讨女孩子欢心吗?
  5. 周杰伦新歌《说好不哭》彩蛋大汇总! | 今日最佳
  6. 放大器非线性失真研究装置_高效布里渊光纤放大器
  7. 3d目标检测_CVPR 2020 |基用于3D目标检测的层级图网络
  8. java接口那一节是哪的知识_Java中的接口知识汇总
  9. pythonjson数据提取_python爬虫学习笔记(十)-数据提取之JsonPath的使用
  10. mysql 拷贝安装_Mysql的安装和主从复制