當前位置:首頁 » 編程語言 » 樹c語言

樹c語言

發布時間: 2022-02-02 16:07:29

㈠ 二叉樹 c語言

fhf

㈡ 關於c語言二叉樹

完全二叉樹除了第一層和最後一層外,其餘各層的結點數都是2的冪,所以都是偶數,因此,當最後一層的結點數為偶數時,樹的總結點數才可能是奇數.
而完全二叉樹只有最後一層的結點數為奇數時,樹中才可能存在唯一的度為1的結點,即最後一個結點的父結點.但現在最後一層結點數為偶數,所以樹中不存在度為1的結點,即n1=0.
所以n=n0+n2=2n0-1=699,n0=350

㈢ c語言_樹

我很奇怪,不用先序中序或者中序後序,你如何能確定一棵唯一的樹呢,不能確定樹如何來遍歷等等。。。。。。。。。。

參考一下
一、 實驗名稱:二叉樹的建立和遍歷
二、 實驗目的:練習遞歸演算法
三、 實驗內容:在上一次實驗的基礎之上增加以下功能
a) 統計二叉樹深度
b) 統計二叉樹中葉子個數
c) 二叉樹中所有左右子樹交換
四、 實驗步驟
#include<stdio.h>
#include<iostream.h>
#include<stdlib.h>
#define size 100
typedef struct BiTNode
{
char data;
struct BiTNode *lchild, *rchild;
} binode, *bitree;
typedef struct
{
bitree data[size];
int tag[100];
int top;
}sqstack;

void initstack(sqstack &t)
{
t.top=-1;
}
int stackempty(sqstack t)
{
if(t.top==-1)
return 1;
else
return 0;
}
int gettop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top];
t.top--;
return 1;
}
}
int push(sqstack &t,bitree &a)
{
if(t.top==size-1)
return 0;
else
{
t.data[++t.top]=a;
return 1;
}
}
int pop(sqstack &t,bitree &a)
{
if(t.top==-1)
return 0;
else
{
a=t.data[t.top--];
return 1;
}
}
void createbitree(bitree &T,char a[],int la,int ha,char b[],int lb,int hb)
{
int m;
char c;
if(la>ha)
T=NULL;
else
{
if(!(T=(bitree)malloc(sizeof(binode))))
exit(0);
else
{
T->data=a[la];
m=lb;
while(b[m]!=a[la]) m++;
createbitree(T->lchild,a,la+1,la+m-lb,b,lb,m-1);
createbitree(T->rchild,a,la+m-lb+1,ha,b,m+1,hb);
}
}
}
int createbitree(bitree &T)
{
char a[5], b[5];
int i, j, n;
char ch;
n=0;
printf("abcd*badc\n");
scanf("%c", &ch);
while( ch!='*' ) { a[n++]=ch; scanf("%c", &ch);}
for(i=0; i<n; i++) scanf("%c", &b[i]);
createbitree(T, a, 0, n-1, b, 0, n-1);

}
int preorder (bitree p)
{
sqstack S;
initstack(S);
printf("先序遍歷\n");
while(!stackempty(S) || p!=NULL)
{
while(p!=NULL) //指向左子樹
{
printf("%c ",p->data);
push(S,p); //非空時入棧
p=p->lchild;
}
pop(S,p); //指針出棧

p=p->rchild;
}
printf("\n");
}
int inorder (bitree p)
{
sqstack s;
initstack(s);
printf("中序遍歷\n");
while(!stackempty(s)||p)
{
if(p)
{
push(s,p);
p=p->lchild;
}
else
{
pop(s,p);
printf("%c ",p->data);
p=p->rchild;
}
}
return 1;

}
void postorder(bitree p)
{
printf("\n");
sqstack s;
initstack(s);
printf("後序輸出\n");
while(p||!stackempty(s))
{
while(p)
{
s.top++;
s.data[s.top]=p; //子樹根結點進棧
s.tag[s.top]=0; //設此根結點標志初始化為0,表示左右孩子都沒訪問,當訪問完左子樹 tag 變為1
p=p->lchild; //進入左子樹訪問。(左子樹根結點全部進棧)
}
while((s.top>-1)&&(s.tag[s.top]==1))
{
p=s.data[s.top];
cout<<p->data<<" "; //沒有孩子的根結點,也就是它父親的左孩子或右孩子
s.top--;
}
if(s.top>-1)
{
p=s.data[s.top];
s.tag[s.top]=1; //進入右子樹 前,標志tag變為1
p=p->rchild; //進入右子樹
}
else
p=NULL;
}
}
void CountLeaf (bitree T, int& count)
{
if ( T )
{
if ((!T->lchild)&& (!T->rchild)) count++;
CountLeaf(T->lchild , count); //統計左子樹中葉子個數
CountLeaf(T->rchild ,count); //統計右子樹中葉子個數
}
}
int depthval=0,depthLeft=0, depthRight=0;
int Depth (bitree T )
{
if ( !T )
depthval = 0; // depthval是一個全程變數
else
{
depthLeft = Depth( T->lchild );
depthRight = Depth( T->rchild );
depthval = 1 + (depthLeft > depthRight ? depthLeft : depthRight);
}
return depthval;
}
void change(bitree T)
{
bitree p,q;
if(T)
{
p=T->lchild;
T->lchild=T->rchild;
T->rchild=p;
change(T->lchild);
change(T->rchild);
}
}
void main()
{
bitree T;
int count=0;
createbitree(T) ;
preorder(T);
inorder(T);
postorder(T);
CountLeaf (T,count);
printf("\n");
printf("葉子的個數是:%d\n",count);
Depth ( T );
printf("樹的深度是:%d\n",depthval);
printf("交換後。。。\n");
change(T);
preorder(T);inorder(T);
postorder(T);
}

㈣ 關於數據結構--樹 (C語言版)

設總共有n個節點 顯然就有
n=n0+n1+n2+...+nm 其中no就表示葉子節點
而除了根節點外每個節點都由別的結點引出
n-1=0*n0+1*n1+2*n2+...+m*nm
聯立兩個等式得
n0=1+n2+2n3+...+(m-1)nm

㈤ C語言樹的額

更具公式:
n[m]*(m - 1) + n[m - 1]*(m - 2).....+n[4]*3 + n[3]*2+n[2]*1 + n[1]*0 + 1= n[0]。
註:n[m]指度為m的結點的數量,n[m - 1]指為m - 1的結點的數量....以此類推。
所以,在本題中n[3]=2,n[2] = 1.帶入公式2*2+1*1 + 1 = 6。選D

㈥ C語言中的樹和圖有什麼用

  1. 在程序設計當中,樹和圖是兩種常見的數據結構,在計算機技術應用十分廣泛,他們也是兩種思考問題的方式,常用於結局實際問題。樹最直觀的用途就是如人類社會的族譜和各種社會組織機構都可用樹形象表示。樹在計算機領域中也得到廣泛應用,如在編譯源程序如下時,可用樹表示源源程序如下的語法結構。在資料庫系統中,樹型結構也是信息的重要組織形式之一,一切具有層次關系的問題都可用樹來描述。數據結構的圖就是實際情況的抽象,即邏輯模型,然後通過計算機編程來解決問題。比如一個很復雜的地圖,有很多城市,有很多路,如何找出最短路徑呢?當然是用計算機來算了,就得用圖來表示等等。

  2. 數據結構是計算機存儲、組織數據的方式。數據結構是指相互之間存在一種或多種特定關系的數據元素的集合。通常情況下,精心選擇的數據結構可以帶來更高的運行或者存儲效率。數據結構往往同高效的檢索演算法和索引技術有關。
    數據的邏輯結構:指反映數據元素之間的邏輯關系的數據結構,其中的邏輯關系是指數據元素之間的前後件關系,而與他們在計算機中的存儲位置無關。邏輯結構包括:
    a.集合
    數據結構中的元素之間除了「同屬一個集合」 的相互關系外,別無其他關系;
    b.線性結構
    數據結構中的元素存在一對一的相互關系;
    c.樹形結構
    數據結構中的元素存在一對多的相互關系;
    d.圖形結構
    數據結構中的元素存在多對多的相互關系。

㈦ 二叉樹的操作C語言

不知道你要怎麼樣遍歷。
creatTree(BiTree)
先序遍歷
void PreOrder(BiTree *p)
{
if(p!=NULL)
{
printf("%d",p->data);
PreOrder(p->lchild);
PreOrder(p->rchild);
}
}

㈧ 用c語言輸出樹

假設輸出這棵樹:
.....7
..../.\
...5...6
../\.../\
.1..2.3..4
其中.代表空格

首先不論你用什麼方法(先根,中根,後根),將樹讀入一個數組
然後計算各層的結點數,當然也可以在遍歷的同時,將各層的結點數用一個數組保存起來
然後用for循環控制輸出的層數(注意,將"/","\"所佔層數也考慮進去),
然後具體輸出各層,至於每個結點,以及"/"和"\"間各空多少空格,
自己多輸出幾次看看效果,調整就可以了

㈨ 二叉樹c語言實現

#include<iostream.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node *lchild,*rchild;//
}BiTNode,*BiTree;
void CreatBiTree(BiTree &T)
{
char ch;
ch=getchar();
if (ch == ' ')
T = 0;
else {
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=ch;//生成根節點
CreatBiTree(T->lchild);//構造左子樹
CreatBiTree(T->rchild);//構造右子樹
}
}
void preorder(BiTree T)//前序遍歷
{
if (T!=NULL){
printf ("%c",T->data);
preorder(T->lchild);
preorder(T->rchild);
}
}
void inorder(BiTree T)//中序遍歷
{
if (T!=NULL){
inorder(T->lchild);
printf ("%c",T->data);
inorder(T->rchild);
}
}
void postorder(BiTree T)//後序遍歷
{
if (T!=NULL){
postorder(T->lchild);
postorder(T->rchild);
printf ("%c",T->data);
}
}
void main ()
{
cout<<"請輸入要創建的二叉樹包括空格:"<<endl ;
BiTree T;
CreatBiTree(T);//創建二叉樹
cout<<"前序遍歷的結果為:"<<endl;
preorder(T);
cout<<endl;
cout<<"中序遍歷的結果為:"<<endl;
inorder(T);
cout<<endl;
cout<<"後序遍歷的結果為:"<<endl;
postorder(T);
}

㈩ c語言:二叉樹

system("cls");//清屏
printf("input tree node elem(elem-->left-->right):\n");//屏幕上輸出--請輸入樹節點元素,(元素-->左--》右) 如何輸入,要看Pre_Create_BT函數

熱點內容
java的vector 發布:2024-04-27 07:05:00 瀏覽:203
舊電腦共享伺服器 發布:2024-04-27 06:32:21 瀏覽:339
java程序練習 發布:2024-04-27 06:24:00 瀏覽:438
sql30 發布:2024-04-27 06:22:10 瀏覽:55
怎樣防止sql注入 發布:2024-04-27 06:11:25 瀏覽:236
安卓為什麼不能登蘋果系統的游戲 發布:2024-04-27 06:11:23 瀏覽:600
編程日課 發布:2024-04-27 05:56:54 瀏覽:620
漏洞上傳工具 發布:2024-04-27 05:50:58 瀏覽:716
手機如何選擇存儲 發布:2024-04-27 05:40:25 瀏覽:799
機架式伺服器怎麼操作 發布:2024-04-27 05:19:02 瀏覽:816