700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储 root指向根结点 node

数据结构--二叉树--路径 假设二叉树采用二叉链表方式存储 root指向根结点 node

时间:2021-09-29 06:11:48

相关推荐

数据结构--二叉树--路径  假设二叉树采用二叉链表方式存储  root指向根结点 node

假设二叉树采用二叉链表方式存储, 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结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。