向大家请教下,树的插入问题,C语言描述

AZHANG00000 2007-12-15 10:24:55
//功能描述:已经创建了一棵树,要插入一个新结点作为在这棵树的一个结点的左子树,这个结点,原来的左子树成了新插入的结点的左子树,代码如下,我想请教一下,我的代码为何达不到我的目的呢?

//--------------------------------------------------------

BinaryTree.h

//-----------------------------------------------------------

#include "stdlib.h"

#define MAX_TREE_SIZE 100
#define MAXSIZE 100

#ifndef Elem
#define Elem int
#endif

typedef struct BiTNode //树结点
{
Elem data;
struct BiTNode *lchild,*rchild;
}*TreeNode;





TreeNode CreateNode(Elem data) //创建树结点
{
TreeNode Node=(TreeNode)malloc(sizeof(struct BiTNode));
Node->data=data;
Node->lchild=NULL;
Node->rchild=NULL;
return Node;
}



TreeNode SearchNode(TreeNode root,Elem data) //查找一个树结点,data为所查找的结点的值
{
TreeNode &tp=root;
Queue Q=InitQueue();
if(tp==NULL)return NULL;
while(tp)
{
if(tp->data==data)return tp;
if(tp->lchild)Push(Q,tp->lchild);
if(tp->rchild)Push(Q,tp->rchild);
tp=Pop(Q);
}
return NULL;
}



void InsertNode(TreeNode &position,Elem data,int flag)//flag=0 insert left,flag=1 insert right
{
TreeNode temp=NULL;
if(flag==0){
if(position->lchild!=NULL){//不是叶子结点
temp=CreateNode(data);
temp->lchild=position->lchild;
position->lchild=temp;
}
else
position->lchild=CreateNode(data);
}
if(flag==1){
if(position->rchild!=NULL){//不是叶子结点
temp=CreateNode(data);
temp->rchild=position->rchild;
position->rchild=temp;
}
else
position->rchild=CreateNode(data);
}
}





void preorder(TreeNode root)//遍历

{
if(root == NULL) return;
visit(root);
preorder(root->lchild);
preorder(root->rchild);
}



//-------------------------------------------



#include "BinaryTree.h"

int main(int argc, char* argv[])
{
TreeNode root,position;


printf("create the binary tree!\n");
root=CreateNode(10);
root->lchild=CreateNode(20);
root->rchild=CreateNode(30);
root->lchild->lchild=CreateNode(40);
root->lchild->rchild=CreateNode(50);
root->rchild->lchild=CreateNode(60);
root->rchild->rchild=CreateNode(70);
root->lchild->lchild->lchild=CreateNode(80);
root->lchild->lchild->rchild=CreateNode(90);
position=SearchNode(root,40);


printf("insert the node!\n");
InsertNode(position,100,0);



printf("打印!\n");

preorder( root);



return 0;

}



呵,有点长,各位耐心看下了,谢谢你们

...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Minkey 2007-12-15
  • 打赏
  • 举报
回复
有错吗?看不出来....
难道Queue的实现有问题?
楼主的结果是怎样的?
AZHANG00000 2007-12-15
  • 打赏
  • 举报
回复
可以结贴了,

是Queue的定义有问题,它的元素该是指向树结点的指针的指针(或引用)才行

谢谢你们了
AZHANG00000 2007-12-15
  • 打赏
  • 举报
回复
没有插入到root中

你们认为Queue该如何实现呢
xdlly 2007-12-15
  • 打赏
  • 举报
回复
说的不明白
p0303230 2007-12-15
  • 打赏
  • 举报
回复
没有插入到root中

33,028

社区成员

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

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