使用遞迴的方法求樹高的思路:
主要有兩個問題需要解決:
第一,樹的高度如何表示和計算
第二,樹的分支如何處理
對於第乙個問題,求樹的高度可以分解為求樹的子樹的高度再加1,子樹的高度同樣等於子樹的子樹的高度加1,這樣就可以一層一層的向下分解,直到最後一層葉子節點,它沒有左右子樹了,這時它的高度是1,這也就是遞迴終止條件,然後向上返回樹的高度。
對於第二個問題,當樹只有左子樹或者右子樹時,直接求對應子樹的高度即可,如果左右子樹都存在的話,就需要判斷左子樹和右子樹哪個高,返回更高的數值。
例:
程式流程:
判斷節點1有兩個子樹,需要分別求出這兩個子樹的高度;程式進入節點1的左子節點2
判斷節點2有兩個子樹,分別求出這兩個子樹的高度,程式進入節點2的左子節點4
判斷節點4沒有左右子樹,返回1,程式回到節點2,程式進入節點2的右子節點5
判斷節點5沒有左右子樹,返回1,程式回到節點2,判斷節點2的左子樹高度1和右子樹高度1相同,返回樹高1+1,程式回到節點1,程式進入節點1的右子節點3
判斷節點3沒有左右子樹,返回1,程式回到節點1,判斷節點1的左子樹高度2和右子樹高度1,返回樹高2+1,程式結束
求樹高**:
typedef int elementtype;
typedef struct treenode* tree;
struct treenode;
int max(int a,int b)
int treeheight(tree t)
else if(t->lift==null && t->right!=null)
else if(t->lift!=null && t->right!=null)
else
return 1;
}
用遞迴方法求n!
求n!可以用遞推方法,即從1開始,乘2,再乘3.一直乘到n。這種方法容易理解,也容易實現。遞推法的特點是從乙個已知的事實出發,按一定規律推出下乙個事實,再從這個新的已知的事實出發,再向下推出乙個新的事實。這是和遞迴不同的。求n!也可以用遞迴方法,即5!4!5,而4!3!4,1!1.可用下面的遞迴公式...
遞迴方法求n 階乘
遞迴的定義 在定義乙個過程或函式時,出現呼叫本過程或者是本函式的成分,稱之為遞迴。通常需要用到遞迴的方法 定義是遞迴的。例如n fibonacci數列問題 資料結構是遞迴的 單鏈表的資料結構,二叉樹的資料結構 問題的求解方式是遞迴的 漢諾塔問題 用遞迴和非遞迴兩種方式求n 問題 include in...
Meta of Meta 求元方法遞迴
首先,我們解決乙個問題,我們有了第乙個方法。然後,我們想解決包含這個問題的一類問題,我們總結乙個元方法。然後,我們想知道怎麼樣找到一類問題的方法的方法,這是就是元方法的元方法。或者說,元元方法。這樣的乙個不斷上溯的過程,我稱之為求元方法遞迴。那麼我們該如何衡量這個元方法的業務 技術收益?元方法的收益...