社区
数据结构与算法
帖子详情
请问求一棵树的任意一个接点的祖先接点怎么求??
beyondada
2005-11-30 07:07:20
清高手提供算法!!
递归和非递归都行!!
谢谢
...全文
308
15
打赏
收藏
请问求一棵树的任意一个接点的祖先接点怎么求??
清高手提供算法!! 递归和非递归都行!! 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Kid4you
2006-01-26
打赏
举报
回复
普通BTREE只有遍历所有节点
sailor_Song
2006-01-26
打赏
举报
回复
就是遍历树了,另外用一个栈来保存祖先,
zzwu
2006-01-26
打赏
举报
回复
同意 lxb365
f_acme
2006-01-01
打赏
举报
回复
树的结构中保存此节点的父节点,然后遍历就行了
Lynan
2005-12-29
打赏
举报
回复
不好意思,上面的函数名都一样,我拿一个现成算法改的,没改完全。
不过,最好还是根据需要设计相应的结构去实现算法。
Lynan
2005-12-29
打赏
举报
回复
同样同意 lxb365(靓声靓影)!
另外给你个递归算法
BiTree FindParent(Bitree T,Bitree p)
{
if(T==p)
{
found=TRUE;
return;
}
if(T->lchild) Findpath(T->lchild,p);
if(T->rchild&&!found) Findpath(T->rchild,p);
if(!found) return;
else return T;
}
sanhill
2005-12-04
打赏
举报
回复
同意 lxb365(靓声靓影)!
我以前做项目,树就是根据 父节点 来维系的,没有子孙孩子节点。
根据需要设计结构吧。
syy64
2005-12-04
打赏
举报
回复
类似GIS中路线拓扑查询原理。
lxb365
2005-12-04
打赏
举报
回复
在设计这个二叉树的结点的时候,多加一个指针,就是指向父结点的指针就可以了,这样会很方便。
TianGuangZao
2005-12-03
打赏
举报
回复
以下是我用 c++ 写的一段递归算法,未测试,仅作参考:
// t 为指向树根结点的指针,p 为指向任意结点的指针,pp 为指向父结点的引用型指针,
// 引用型标识位 finded 为 true 表示已经在某个位置找到
// 采用先序遍历递归算法,未验证
template <typename T>
bool BinaryTree<T>::Parent(BTNode<T>* t, const BTNode<T>* p, BTNode<T>*& pp, bool& finded)
{
if (t==NULL) return false; // 空树,返回 false
if (t==p) return false; // p 指向根结点,故无父结点,返回 false
if (t->lChild==p && t->rChild==p) { // 如果 p 为指向 t 的孩子结点的指针, 则 pp 即为 t
pp = t;
finded = true; // 设置标识位 finded 为 true,停止查找,逐层递归放回
return true;
}
Parent(t->lChild, p, pp); // 在左子树继续查找
if (!finded) // 如果在左子树没找到,则继续在右子树查找
Parent(t->rChild, p, pp);
}
beyondada
2005-12-03
打赏
举报
回复
普通二叉树的父节点!
有没有人提供递归的算法啊!!
sankt
2005-11-30
打赏
举报
回复
//p所指为任意一个节点,求出一个根节点到p所指节点之间路径的函数
//当然这条路径上的所有节点都是p节点的祖先
typedef struct tree
{
int data;//存放结点数据内容
struct tree *lchild,*rchild;
}btree; //声明新类型树结构
const int N=50;
typedef btree* b_tree;//声明二叉树的链表
void path(b_tree root,int x)
{
b_tree stack[N],p;
bool tag[N];
int top=-1,i;
p=root;
do
{
while(p!=NULL) //扫描左节点,入栈
{
++top;
stack[top]=p;
tag[top]=false;
p=p->lchild;
}
if(top>-1)
{
if(tag[top]==true) //左右节点都已经访问过
{
if(stack[top]->data==x) //该节点就是要找的节点
{
cout<<"The path is: "; //输出从栈底到栈顶的元素
for(i=0;i<=top;++i)
{
cout<<setw(5)<<stack[i]->data;
}
break;
cout<<endl;
}
--top;
}
else
{
p=stack[top];
if(top>-1)
{
p=p->rchild; //扫描右节点
tag[top]=true; //表示当前节点的右子树已经访问过
}
}
}
}while(p!=NULL || top !=-1);
}
cunsh
2005-11-30
打赏
举报
回复
树呢?
Kid4you
2005-11-30
打赏
举报
回复
普通二叉树就遍历吧...
dgzha
2005-11-30
打赏
举报
回复
你这个题意不清楚,是什么树,binary tree?
《数据结构》应用题参考习题.pdf
1. 已知
一棵树
的边的集合,试画出这棵树,并回答相关问题: (1)哪个是根结点? (2)哪些是叶子结点? (3)哪个是结点g 的双亲? (4)哪些是结点g 的
祖先
? (5)哪些是结点g 的孩子? (6)哪些是结点e 的孩子...
离散数学教案10PPT课件.pptx
1. **根树**:
一棵树
如果有
一个
特殊的顶点被称为根,那么这棵树就是根树。 2. **根**:根树中的特殊顶点,通常表示树的起点或起始点。 3. **叶**:度数为1的顶点,也就是只有一条边连接的顶点,通常代表树的末端。 4...
第五章:树
0)个互不相交的有限集合T1, T2,…, Tm,其中每个集合本身又是
一棵树
,并且称为根结点的子树。 2.基本术语 结点之间的关系描述
祖先
结点:从
一个
结点出发,一直往上走,直至根节点,这条路上所有的结点都是该结点...
树形dp总结
树形dp总结 这是我自认写得最认真最详细的一篇总结 套路: 1.一般设的状态是dp[u],因为阶段是由深的到浅的。...题意:给定
一棵树
,每条树边附带边权,
求
每个点的在这棵树上能够去到的最远距离。 考虑...
算法笔记——最近公共
祖先
(LCA)
获得
一棵树
的欧拉序列,以u,v首次出现的下标为区间端点,利用RMQ查询区间中节点深度的最小值,该节点即为u,v的LCA void dfs(int x,int d) { vis[x]=true; pos[x]=++tot;//首次出现位置,向下搜索时记录 seq[tot]=...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章