這次是樹的基本操作,包括生成樹,求樹深度,求葉子節點個數。。。
附上二叉樹的幾個重要性質及證明(考研必考)。
1.在二叉樹的第i層至多有2^(i-1)個結點;
2.深度為k的二叉樹至多有2^(k)-1 個結點;
3.對任何一棵二叉樹t,如果其終端結點數為n0,度為2的結點數為n2,則n0=n2+1;(n=n0+n1+n2=n1+2n2+1);
4.具有n哥節點的完全二叉樹深度為【log2n】+1;
#include
#include
#define maxsize 20
#define maxwidth 20
typedef struct node
btree;
btree* createnode(char ch,btree *l,btree *r);
//先序遍歷
void preorder(btree *bt)
}//中序遍歷
void inorder(btree *bt)
}//後序遍歷
void postorder(btree *bt)
}//從括號表示式生成樹
void createtree(btree **bt,char *str)//create a tree bt according by hollow function str
p->data=ch;
p->left=p->right=null;*/
p=createnode(ch,null,null);
if(*bt==null)//the root node
else}}
j++;
ch=str[j];//get next char}}
/*void createtree(btree **bt,char *str)}*/
//生成節點
btree* createnode(char ch,btree *l,btree *r)
p->data=ch;
p->left=l;
p->right=r;
return p;
}//複製樹
//copy a tree and return the new tree's point
btree* copytree(btree *t)
else newptl=null;
if(t->right!=null) newptr=copytree(t->right);
else newptr=null;
newt=createnode(t->data,newptl,newptr);
//newt=createnode(t->data,null,null);
//newt=null;
return newt;
}//層次法列印樹
void disptree(btree *bt)
if(p->left!=null)}}
}int treedepth(btree *bt)//calculate the depth of tree
}int nodecount(btree *bt)//cout the nodes
int leafcount(btree *bt)//count the leafnodes
void printtree(btree *bt)//print tree}}
main()
考研複習(4) 棧操作
終於把棧搞定了,還是自己太懶。主要的演算法是1 數的的進製轉換2 括號匹配3 行編輯 迷宮那個還是先放一下吧。include include define maxsize 100 define stack increase 10 typedef char elemtype typedef struc...
考研複習(3)鍊錶操作續
幾個感覺不錯的簡單演算法 void merge1 linklist la,linklist lb,linklist lc 將倆有序鍊錶合併成有序鍊錶 void merge2 linklist la,linklist lb,linklist lc 將兩個非遞減的鍊錶合併成乙個非遞增的鍊錶 void d...
Linux基本操作複習
history 5 列出最近五個記錄 ls 執行最後一次以ls開頭的命令 內部變數在程式中用來作出判斷。在shell程式內這類變數的值不能i修改。如 傳送給shell程式的位置引數的個數 命令執行後返回的狀態 0 當前執行的程序的名稱 呼叫shell程式時所傳送的全部引數組成的字串 測試指令碼 ec...