Java語言用遞迴和非遞迴實現二叉樹的前序遍歷

2021-09-24 10:42:14 字數 672 閱讀 7627

目錄

1 遞迴實現

1.1 思路

1.2 **

2 非遞迴實現

2.1 思路

2.2 **

底層是由棧實現,若根節點非空,先列印根節點,之後遞迴到根節點的左孩子節點...當遇到null節點時,返回;此時第6行**執行完畢,進入第7行**,注意此時遞迴後的節點,訪問到當前節點的右孩子節點又進入遞迴~剛開始理解遞迴有些難,但這要自己慢慢琢磨、摸索**~

void binarytreeprevorder1(treenode root)

system.out.print(root.value+" ");

binarytreeprevorder1(root.left);

binarytreeprevorder1(root.right);

}

底層用棧實現,定義乙個節點指向根節點,當根節點不為空的時候將其入棧,並將其列印,該節點指向左孩子節點,直到將所有的左孩子節點都入棧,取出棧頂節點,將棧頂節點的右孩子入棧並列印,依次這樣下去就完成了前序遍歷~

void binarytreeprevordernonr(treenode  root)

cur = stack.pop().right;

}}

用遞迴和非遞迴實現斐波那契數列(C語言)

斐波那契數列 fibonacci sequence 又稱 分割數列 因數學家列昂納多 斐波那契 leonardoda fibonacci 以兔子繁殖為例子而引入,故又稱為 兔子數列 指的是這樣乙個數列 1 1 2 3 5 8 13 21 34 在數學上,斐波納契數列以如下被以遞推的方法定義 f 1 ...

遞迴和非遞迴

1 遞迴就是函式呼叫函式本身,執行起來就是函式巢狀函式,層層巢狀,所以函式呼叫 引數堆疊都是不小的開銷,但是程式簡單。2 非遞迴就是不斷地對引數入棧 出棧,省去了函式層層展開 層層呼叫的開銷。雖然引數出入棧次數多了,但是一般都開闢固定的足夠大的記憶體來一次性開闢 重複使用。3 非遞迴是從堆疊的角度來...

遞迴和非遞迴分別實現strlen

遞迴和非遞迴分別實現strlen 來計算字串長度。方法一 遞迴 1 鍵入要求的字串 2 判斷字串是否為空,為空返回0 不為空返回strlen a 1 1 a 1表示字串後移一位 1表示字串長度 1 3 列印結果 方法二 1 鍵入要求的字串 2 判空,空則返回0 不為空則迴圈,count自增 3 列印...