二叉树
编写在二叉链表存储结构下二叉树的按层遍历算法 问题点数:20、回复次数:9Top
1 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-12-02 10:50:10 得分 0
树是特殊的图,直接利用广度优先搜索。Top
2 楼oyxiaoyu0(小雨仔)回复于 2003-12-02 11:33:43 得分 0
先续便利后序等等都可以了~
func(node*)
{
while(node != null )
{
visit(root);
func(root.left);
func(root.right);
}
}
大体上就是这样的思路吧Top
3 楼hqulyc((vc++++++++...死循环了))回复于 2003-12-02 16:59:03 得分 3
编写在二叉链表存储结构下二叉树的按层遍历算法
------------
用队列实现,
PushQ(q,bt);
while(!QueueEmpty(Q))
{
PopQ(Q,p);
if(p!=NULL)
{
cout<<p->data;//访问p结点
PushQ(q,p->lchild);
PushQ(q,p->rchild);
}
}
思路大概是这样的,希望对你有帮助Top
4 楼likangnian0128(while(1);)回复于 2003-12-04 10:25:09 得分 0
回复人: hqulyc(无声) ( ) 信誉:100 2003-12-02 16:59:00 得分:0
用队列实现, PushQ、PopQ
——————————————————————————————————————————
队列的入队、出队操作被命名为push、pop容易引起人的误解(反正我第一眼看到的感觉就是:为什么要用堆栈?)
队列的操作命名中,入队用enqueue,出队用dequeue比较直观。
Top
5 楼lj1006(正在学习VC……)回复于 2003-12-05 01:20:26 得分 0
以中序为例,就是递归的 思想
void Inorder(BSTNode* BST)
{ //if(BST==NULL) cout<<"无记录!";
if(BST!=NULL)
{
Inorder(BST->left);
cout<<BST->data<<endl;
Inorder(BST->right);
}
}Top
6 楼lj1006(正在学习VC……)回复于 2003-12-05 01:22:16 得分 0
void Inorder(BSTNode* BST)
{
if(BST!=NULL)
{
Inorder(BST->left);
cout<<BST->data<<endl;
Inorder(BST->right);
}
}
Top
7 楼lj1006(正在学习VC……)回复于 2003-12-05 01:23:03 得分 2
补充:struct BSTNode {
ElemType data;
BSTNode* left;
BSTNode* right;
};Top
8 楼hqulyc((vc++++++++...死循环了))回复于 2003-12-07 19:46:56 得分 0
likangnian0128(while(1);):确实用你那个比较直观,我只是大概记得思路而已,Top
9 楼Sodier(逍遥神剑)回复于 2003-12-08 02:35:35 得分 15
void Broadbs(Nodeptr root)
{
Nodeptr queue[MAX];//用数组实现循环队列
int head,tail;//队列的头和尾
Nodeptr p;
head=tail=-1;
queue[++tail]=root;//根节点先入队
while(tail-head==-1)//判断队列是否为空,即头在尾的后面
{
head=(head+1)%MAX;//头指针后移
r=queue[head];//出对
visist(r);//访问
if(r->left)//如果有左孩子则入队
{
p=r->left;
tail=(tail+1)%MAX;//实现循环,可以不用取模,但数组必须足够大
queue[tail]=p;
}
if(r->right)//如果有右孩子则入队
{
p=r->right;
tail=(tail+1)%MAX;
queue[tail]=p;
}
}
}
Top




