(在網上借鑑了
白書介紹了對一棵二叉樹進行層次遍歷的過程,經過我的總結和優化之後,發表一篇部落格在這裡,留著忘記的時候回來看看。
題目如下:
按照某種方式輸入一棵二叉樹,然後從上到下、從左到右(按照層次
)輸出各結點的值。每個結點先輸入所要賦的數值,後輸入路徑。輸入過程由"l"和"r"表示。相鄰結點之間用空格隔開,結點的左括號和右括號之間沒有空格。每棵樹以()結束。
結點個數不超過256。
sample
input:
(11,ll) (7,lll) (8,r) (5,) (4,l) (13,rl) (2,llr) (1,rrr) (4,rr) ()
(3,l) (4,r) ()
output:
5 4 8 11 13 4 7 2 1 -1
——————————————————我是華麗的分割線——————————————————
思路:使用靜態化動態的思想建立二叉樹。靜態申請樹的空間。利用下標控制新結點。
**如下:
#include #include #include #include using namespace std;
const int maxn = 300;
struct nodetree[maxn];//建立乙個二叉池(靜態申請二叉樹)
node* root;//宣告根結點指標
char s[maxn];
int cnt, ans[maxn], next;//next用來控制新節點,cnt用來計數當前結點個數
node* newnode()
void addnode(int val, char* s) else if(s[i] == 'r')
u->val = val;//賦值
u->vis = 1;
}bool readin()
return true;
}bool bfs()
return true;
}int main()
else
puts("-1");
}return 0;
}
——————————————————我是華麗的分割線——————————————————
盡量不用指標和靜態化動態的方法,用陣列代替
**:
#include#include#includeconst int maxn=300;
struct node
tree[maxn];
char s[maxn];
int cnt,ans[maxn],next,root;
int newnode()//這裡的部分用陣列代替了指標和靜態化動態
void addnode(int val,char *s) //表示樹中新增結點
{ int len=strlen(s);
int u=0; //從根結點向下走
for(int i=0;i
果園裡的樹(劉汝佳的小白5 4 3)詳解
果園裡的樹排列成矩陣。他們的x和y的座標均是1 99的整數。輸入若干個三角形,依次統計每個三角形內部和邊界上共有多少棵樹。輸入 1.5 1.5 1.5 6.8 6.8 1.5 10.7 6.9 8.5 1.5 14.5 1.5 此題用三角形有向面積來解,求有向面積2倍 的函式為 double are...
點和向量的表示和基本計算 劉汝佳版
include include include include include using namespace std struct point typedef point vector 向量 向量 向量,點 向量 點 vector operator vector a,vector b 點 點 向量...
演算法競賽入門經典(劉汝佳) 習題2 4子串行的和
樣例輸入 2 465536 655360 0 0樣例輸出 case 1 0.42361 case 2 0.00001 分析 輸出保留5位小數 輸入包含多組資料 這意味著資料是成批的,是一堆放在一起的,需要自己確定那幾個資料是本次需要的 結束標記 n m 0,表示n和m中任意乙個都不為零 n6本題有陷...