用中序遍历二叉树的兄弟节点的算法

openzpc 2009-12-28 12:06:47
哪位能给我一个完整的算法,要非递归的。兄弟节点或双亲节点
...全文
408 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
openzpc 2010-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nosuchtracter 的回复:]
你的这个兄弟节点,在数据中已经组织好了吗?是一个二叉树?
如果输入数据的时候已经进行了排序,也就是已经是一个二叉树
那每个节点应该都有父节点吧?
找父节点的儿子,一个儿子是自己,另外一个肯定是兄弟节点了
[/Quote]
是啊,找到老子就好说了,我找老师问明白了,:-D
wd_tao 2009-12-31
  • 打赏
  • 举报
回复
void InOrderTraverse ( BTreeNode* T )
{ LinkStack *s; //定义栈指针
BTreeNode *p=T; //当前结点指向根结点
InitStack(s); //初始化空栈
do {
while ( p ) {
PushStock(s, p); //将当前子树根结点入栈
p = p→leftChild; //进入左子树
} //遍历左子树
if ( !Empty(s) ) { //栈非空
s=PopStock(s, p); //退栈
cout<< p→data; //访问根结点
p = p→rightChild; //进入其右一子树
}
} while ( p || !Empty(s) );
}
wd_tao 2009-12-31
  • 打赏
  • 举报
回复
void InOrderTraverse ( BTreeNode T )
{ LinkStack s; //定义栈指针
BTreeNode p=T; //当前结点指向根结点
InitStack(s); //初始化空栈
do {
while ( p ) {
PushStock(s, p); //将当前子树根结点入栈
p = p→leftChild; //进入左子树
} //遍历左子树
if ( !Empty(s) ) { //栈非空
s=PopStock(s, p); //退栈
cout<< p→data; //访问根结点
p = p→rightChild; //进入其右一子树
}
} while ( p || !Empty(s) );
}
pz0513 2009-12-31
  • 打赏
  • 举报
回复
我记得清华大学的严蔚敏版的数据结构那本书里有
javase7 2009-12-31
  • 打赏
  • 举报
回复
一般好像都是递归遍历吧
nosuchtracter 2009-12-29
  • 打赏
  • 举报
回复
你的这个兄弟节点,在数据中已经组织好了吗?是一个二叉树?
如果输入数据的时候已经进行了排序,也就是已经是一个二叉树
那每个节点应该都有父节点吧?
找父节点的儿子,一个儿子是自己,另外一个肯定是兄弟节点了
openzpc 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
中序遍历二叉树的兄弟节点,不明白是啥意思?

就是要非递归中序遍历的话,可以给你。

C/C++ codevoid inorder_nonrecursive(tree root)

{

tree stack[100];int top=0;

tree p= root;while (NULL!= p|| top>0)

{while (NULL!= p)

{

stack[top++]= p;

p= p->left_child;

}



p= stack[--top];

printf("%d\t", p->data);

p= p->right_child;

}

}
[/Quote]


就是找一个节点的兄弟节点,不得遍历二叉树么?要不又其他方法?
  • 打赏
  • 举报
回复
就是找一个节点的兄弟节点,不得遍历二叉树么?要不又其他方法?


如果该2叉树只有子节点,没有父节点,那就只能通过遍历来找了.

有parent就好办咯.

cur->parent->rchild,就是左子的兄弟..
  • 打赏
  • 举报
回复
http://blog.csdn.net/hairetz/archive/2009/12/24/5069128.aspx

还有考虑不用栈实现的,蛮有意思的。
  • 打赏
  • 举报
回复
中序遍历二叉树的兄弟节点,不明白是啥意思?

就是要非递归中序遍历的话,可以给你。


void inorder_nonrecursive(tree root)

{

tree stack[100];

int top = 0;

tree p = root;

while (NULL != p || top > 0)

{

while (NULL != p)

{

stack[top++] = p;

p = p->left_child;

}



p = stack[--top];

printf("%d\t", p->data);

p = p->right_child;

}

}



colin_pxx 2009-12-28
  • 打赏
  • 举报
回复
这个只能去google或者找一本数据结构算法的书看看了

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧