輸入:abc##de#f#g####
輸出:3
不難看出,
以二叉樹方式儲存的樹,二叉樹結點a的左孩子就是樹結點a的左孩子,而二叉樹a的右孩子是樹節點的a的兄弟,既a父節點f_a的某個孩子(非長子)
那麼,可以通過遍歷樹的每個結點,編寫演算法,計算出每個結點的度(既樹的孩子數目),找出其中最大的度,作為該樹的度輸出。
#include #include int max_degree = 0;
typedef struct nodebintree;
/*---建立二叉樹---*/
bintree *createbintree()
return bt;
}int getpiontdegree(bintree *bin)
bin->degree = n;
}getpiontdegree(bin->lchild);
getpiontdegree(bin->rchild);
}}void firstprintfbintreedegree(bintree *bt)
}firstprintfbintreedegree(bt->lchild);
firstprintfbintreedegree(bt->rchild);
}}int main()
在getpiontdegree()函式中遍歷每個結點,計算出每個結點的度,然後又在firstprintfbintreedegree()函式中遍歷每個結點,找出其中度最大的結點,其中每個結點被重複遍歷了兩次,浪費了時間。我們完全可以利用firstprintfbintreedegree()中的遍歷進行同時進行這兩個操作,getpiontdegree()函式在firstprintfbintreedegree()函式中被呼叫,用來計算該迴圈下的每乙個結點的度
給出**
#include #include typedef char datatype;
int max_degree = 0;
typedef struct nodebintree;
/*---建立二叉樹---*/
bintree *createbintree()
return bt;
}int getpointdegree(bintree *bin)
return degree;
}return 0;
}void firstprintfbintreedegree(bintree *bt)
firstprintfbintreedegree(bt->lchild);
firstprintfbintreedegree(bt->rchild);
}}int main()
ps:第一次做這個題,思路快就有了,但是**總是打不出來。第一次嘗試用的迭代,想不出來怎麼把每次的度和迭代的跳出結合起來,**亂套了。最後做出了來,oj還是不給ac,沒弄明白,回來又把**寫了一遍,這次居然過了,真神奇
oj資料結構 Huffman樹
對輸入的英文大寫字母進行統計概率 然後構建哈夫曼樹,輸出是按照概率降序排序輸出huffman編碼。大寫字母個數 n 第乙個字母 第二個字母 第三個字母 第n個字母。字母1 出現次數 huffman編碼 字母2 出現次數 huffman編碼 字母3 出現次數 huffman編碼 字母n 出現次數 hu...
九度OJ 1541 二叉樹 資料結構
題目描述 旋轉是二叉樹的基本操作,我們可以對任意乙個存在父親節點的子節點進行旋轉,包括如下幾種形式 設被旋轉節點為x,其父親節點為p 1.左旋 旋轉前,x是p的右兒子。x的左兒子 若存在 變為p的右兒子,p變為x的左兒子。如下圖 2.右旋 旋轉前,x是p的左兒子。x的右兒子 若存在 變為p的左兒子,...
資料結構OJ作業 二叉樹
題目傳送門 tree recovery 給出乙個二叉樹的前序和中序,求二叉樹的後序。節約空間,並不實際建樹,而是一邊搜尋一邊輸出。同hdoj1710,寫完了這篇blog才發現以前也寫過,尷尬 include include using namespace std char pre 30 in 30 ...