编程树靠树
❶ 二叉树编程
.........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;
}
}
