当前位置:首页 » 编程软件 » 编程树靠树

编程树靠树

发布时间: 2022-05-20 00:03:42

❶ 二叉树编程

.........A
......../...\
.......B.....F
.......\........\
........C.....G
......../\....../
......D.E...H

先序遍历的结果:ABCDEFGH

❷ 关于树的编程基础问题

说明形参是引用阿

❸ C编程树怎么建

用C做,先struct AB { datatype data; struct AB *child[]; } 然后用个子函数输入数据。。。

采纳哦

❹ 有关树的编程,用c语言描述

看数据结构的书去,书上都有具体的算法,稍微修改一下就可以了,我给你看一个我现在正在做的一个二分查找代码填空习题:核心代码如下

intinsert_key(BSTree*root,intkey)
{
BiTnode*father=NULL,*p=root,*s;
while(p!=NULL&&key!=p->key_value)
{
father=p;
if(key<p->key_value)p=p->left;
elsep=p->right;
}
/*这个是二分查找的代码,至于怎么输出这个范围内的,不用我教你了吧?
做个循环就可以了
*/
……
}

❺ C编程中树的问题

楼主犯了个初学者常犯的错误,就是没有牢记C语言中函数参数采用的是值传递方式。
在main中创建树是,传给CreateBiTree的其实是T的一个临时拷贝,CreateBiTree只是对这个拷贝进行操作,对T的值没有任何影响,最后结果只是在内存中创建了几个零散的子树,最后T的值仍为初始值。
建议将CreateBiTree的参数改为BiTree *T,函数内用到T的地方改为*T。

❻ C++编程,树结构生成

AOV图吧

#include<map>
#include<vector>
#include<string>
#include<iostream>

usingnamespacestd;

intmain()
{
map<pair<string,string>,int>mapAOV;
map<pair<string,string>,int>::iteratoriterCur,iterEnd;

vector<string>vecPath;
vector<string>::iteratorvecIter;

struct
{
stringchStart;
intvalue;
}tempStruct;

stringchStart="";
stringchStop="";

mapAOV.insert(make_pair(make_pair("V1","V2"),3));
mapAOV.insert(make_pair(make_pair("V1","V4"),6));
mapAOV.insert(make_pair(make_pair("V1","V3"),2));

mapAOV.insert(make_pair(make_pair("V2","V4"),2));
mapAOV.insert(make_pair(make_pair("V2","V5"),4));

mapAOV.insert(make_pair(make_pair("V3","V4"),1));
mapAOV.insert(make_pair(make_pair("V3","V6"),3));

mapAOV.insert(make_pair(make_pair("V4","V5"),1));

mapAOV.insert(make_pair(make_pair("V5","V7"),3));
mapAOV.insert(make_pair(make_pair("V5","V8"),6));

mapAOV.insert(make_pair(make_pair("V6","V7"),5));
mapAOV.insert(make_pair(make_pair("V6","V9"),4));

mapAOV.insert(make_pair(make_pair("V7","V9"),2));
mapAOV.insert(make_pair(make_pair("V7","V10"),3));

mapAOV.insert(make_pair(make_pair("V8","V10"),4));
mapAOV.insert(make_pair(make_pair("V9","V11"),5));
mapAOV.insert(make_pair(make_pair("V10","V12"),3));
mapAOV.insert(make_pair(make_pair("V11","V12"),2));

tempStruct.chStart="V1";
tempStruct.value=0x7FFFFFFF;

chStart="V1";
chStop="V12";
vecPath.clear();
vecPath.push_back(chStart);

while(chStart!=chStop)
{
iterCur=mapAOV.begin();

while(iterCur!=mapAOV.end())
{
if(iterCur->first.first==chStart)
{
if(iterCur->first.second==chStop)
{
tempStruct.chStart=chStop;
break;
}

if(iterCur->second<tempStruct.value)
{
tempStruct.chStart=iterCur->first.second;
tempStruct.value=iterCur->second;
}
}

iterCur++;
}
chStart=tempStruct.chStart;
tempStruct.value=0x7FFFFFFF;
vecPath.push_back(chStart);
}

cout<<"Path:";
vecIter=vecPath.begin();
while(vecIter!=vecPath.end())
{
cout<<""<<*vecIter++;
}
cout<<endl;
vecPath.clear();
mapAOV.clear();
return0;
}

❼ 关于编程的问题

看一些简单的优秀开源代码,尽量去实用,光靠树上的题目作用还是不大,数据结构,算法的要涉猎一些。重点数据结构。有兴趣可以往嵌入式发展,c语言控制实体的东西会很有趣。
网络编程也是很有趣的。

❽ 数据结构中树一般在编程中是怎么体现的,有什么例子呢

一般讲解和使用比较多的是二叉树,该树使用链式存储结构表示更好。例子的话,可以参考<<大话数据结构>>这本书。希望能帮到您。

❾ 编程的二叉树是什么

一种非线性数据结构
树形结构在我们计算机中应用非常广,例如文件系统等等,而单纯的树形结构在计算机中很难实现,所以一般都会用二叉树的形式来实现一般的树。这样一举两得,既容易实现,又可以用二叉树的性质来处理数据。
看一下《数据结构》课本,讲树的内容比较少,主要讲的是二叉树

❿ 编程关于树的问题

这个是c++程序,呵呵
显示的是后续遍历
#include<iostream.h>
typedef struct TreeNode
{
int key;
struct TreeNode *left;
struct TreeNode *right;

}treeNode;

class BiSortTree
{
public:
BiSortTree(void);
void desplayTree(void);//显示这个树
void insertTree(int key);//在树中插入一个值
deleteTree(int key);//在树中删除一个值
treeNode* searchTree(int key);//在树中查找一个值

~BiSortTree();

private:
treeNode* buildTree(treeNode* head,int number);//建立一个树
treeNode* search(treeNode* head ,int key);//查找
treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p);//查找出p的父亲节点的指针
treeNode* BiSortTree::searchMinRight(treeNode* head);//找到右子树中最小的节点

void showTree(treeNode* head);//显示
void destroyTree(treeNode* head);//删除

treeNode *Head;

};

/**************以下是建立一个二叉排序树****************/
BiSortTree::BiSortTree()
{
cout<<"建立一棵二叉排序树,请输入你要建树的所有数(以-1 作为结束标志!): "<<endl;
Head=NULL;
int number;
cin>>number;
while(number!=-1)
{
Head=buildTree(Head,number);
cin>>number;

}

}
treeNode* BiSortTree::buildTree(treeNode* head,int number)
{

treeNode *p;
p=new treeNode;
p->key=number;
p->left =p->right=NULL;

if(head==NULL)
{

return p;
}
else
{

if(p->key <head->key)
head->left=buildTree(head->left,number);
else
head->right=buildTree(head->right,number);

return head;
}

}
/*****************以下是在一棵二叉排序树插入一个数***********************************/
void BiSortTree::insertTree(int key)
{

Head=buildTree(Head,key);

}
/*****************以下是在一个二叉排序树查找一个数是否存在*************************/
treeNode* BiSortTree::searchTree(int key)
{
return search(Head,key);
}
treeNode* BiSortTree::search(treeNode* head ,int key)
{
if(head==NULL)
return NULL;
if(head->key==key)
return head;
else
{
if(key<head->key )
return search( head->left,key);

else
return search(head->right,key);

}

}

/************以下是在一个二叉排序树删除一个给定的值*********************************/
BiSortTree::deleteTree(int key)
{

treeNode *p;
p=NULL;
p=search(Head,key);
if(p==NULL)
{
cout<<"Don't find the key";

}
if(p==Head)
{
Head=NULL;

}
else
{
treeNode* parent;
parent=searchParent(Head,p);
if(p->left==NULL&&p->right==NULL)//叶子节点
{
if(parent->left==p)
{
parent->left=NULL;
}
else
{
parent->right=NULL;

}
}
else//非叶子节点
{
if(p->right==NULL)//该节点没有右孩子
{
if(parent->left==p)
{
parent->left=p->left ;
}
else
{
parent->right=p->left;

}
}

else//该点有左右孩子
{
treeNode * rightMinSon,* secondParent;//secondParent为右子树中的最小节点的父亲
rightMinSon=searchMinRight(p->right);
secondParent=searchParent(p->right ,rightMinSon);

secondParent->left=rightMinSon->right;

if(p->right==rightMinSon)//右子树中的最小节点的父亲为p
{

p->right=rightMinSon->right ;

}

p->key=rightMinSon->key ;

}
}
}
}

treeNode* BiSortTree::searchParent(treeNode* head,treeNode* p)
{

if(head->left==p||head->right==p||head==p||head==NULL)
return head;
else
{
if(p->key<head->key)
return searchParent(head->left ,p);
else
return searchParent(head->right ,p);

}

}

treeNode* BiSortTree::searchMinRight(treeNode* head)//找到右子树中最小的节点
{

if(head->left ==NULL||head==NULL)
{
return head;

}
else
{
return searchMinRight(head->left);

}

}

/*****************以下是显示一个二叉排序树****************************************/
void BiSortTree::desplayTree(void)
{

showTree(Head);
cout<<endl;
}
void BiSortTree::showTree(treeNode* Head)
{

if(Head!=NULL)
{
showTree(Head->left ) ;

cout<<Head->key<<' ' ;

showTree(Head->right) ;

}

}

/*****************以下是删除一棵整二叉排序树************************************/
BiSortTree::~BiSortTree()
{
cout<<"已经消除了一棵树!!!!"<<endl;
destroyTree(Head);
}
void BiSortTree::destroyTree(treeNode* head )
{

if(head!=NULL)
{
destroyTree(head->left );
destroyTree(head->right );
delete head;

}

}

/*********************/
void print()
{

cout<<endl<<endl<<"以下是对二叉排序树的基本操作:"<<endl
<<"1.显示树的中序遍历"<<endl
<<"2.插入一个节点"<<endl
<<"3.寻找一个节点"<<endl
<<"4.删除一个节点"<<endl;
}

void main()
{
BiSortTree tree;
int number;
int choiceNumber;
char flag;
while(1)
{
print() ;

cout<<"请选择你要进行的操作(1~4)"<<endl;
cin>>choiceNumber;
switch(choiceNumber)
{
case 1:
tree.desplayTree();break;
case 2:
cout<<"请插入一个数: "<<endl;
cin>>number;
tree.insertTree(number);
tree.desplayTree();
break;

case 3:
cout<<"请插入你要找数: "<<endl;
cin>>number;
if(tree.searchTree(number)==NULL)
{
cout<<"没有发现"<<endl;
}
else
{

cout<<"发现"<<endl;

}
break;

case 4:
cout<<"请输入你要删除的数: "<<endl;
cin>>number;
tree.deleteTree(number);
tree.desplayTree();
break;

default: break;
}
cout<<"你是否要继续(Y/N)?"<<endl;
cin>>flag;
if(flag=='N'||flag=='n')
break;

}

}

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:645
制作脚本网站 发布:2025-10-20 08:17:34 浏览:936
python中的init方法 发布:2025-10-20 08:17:33 浏览:632
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:821
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:731
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1066
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:299
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:160
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:850
python股票数据获取 发布:2025-10-20 07:39:44 浏览:763