當前位置:首頁 » 編程軟體 » 編程樹靠樹

編程樹靠樹

發布時間: 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;

}

}

熱點內容
手機優酷緩存視頻格式 發布:2025-05-15 04:13:45 瀏覽:208
公益電影分鏡頭腳本插畫 發布:2025-05-15 04:08:37 瀏覽:959
數據壓縮編碼 發布:2025-05-15 03:58:44 瀏覽:725
java字元為空 發布:2025-05-15 03:57:11 瀏覽:546
速訊安卓哪裡下載 發布:2025-05-15 03:55:02 瀏覽:48
緩存區數據讀寫原理 發布:2025-05-15 03:39:57 瀏覽:585
編譯器生成的是二進制文件嗎 發布:2025-05-15 03:38:42 瀏覽:955
運營為什麼區分ios和安卓 發布:2025-05-15 03:30:02 瀏覽:630
主播網站源碼 發布:2025-05-15 02:50:56 瀏覽:168
中文編程語言有哪些 發布:2025-05-15 02:48:59 瀏覽:536