二叉樹的遞迴演算法

2021-09-01 11:18:18 字數 867 閱讀 1950

二叉樹是一種特殊的資料結構,有乙個根節點,根節點下面有一左一右兩個子節點,每個子節點又有各自的子節點,層層深入成樹狀。

關於二叉樹的遍歷我只學習了遞迴遍歷,非遞迴遍歷比較複雜還是很理解。

遞迴遍歷分為先序,中序和後序。用三個字母表示遞迴遍歷可以很好理解:

d: 訪問根節點,l: 遍歷根節點的左子樹,r:遍歷根節點的右子樹。

先序遍歷:dlr

中序遍歷:ldr

後序遍歷:lrd

先序遍歷的遞迴演算法

function preorder(node) 

}

中序遍歷的遞迴演算法
function inorder(node) 

}

後序遍歷的遞迴演算法
function postorder(node) 

}

更詳細的二叉樹演算法可以檢視這篇文章

遇到的乙個難題是如何實現間隔一段時間(500ms)改變節點的顏色,這就需要用到settimeout()這個方法。剛開始的想法是把定時函式寫進遞迴函式裡面,讓每次遞迴都執行settimeout(),但是這個方法行不通,會改變每個節點出現的順序,而且函式執行結束的時間小於定時時間,導致想要達到的效果一瞬間全部執行完畢,而不是按規定的時間乙個乙個出現,這個理解可能有點錯誤,但是沒辦法達到想要的效果,所以放棄。

我的方法是把遍歷出來的值放進陣列裡,然後再用陣列完成想要做的各種操作。

function preorder(node) 

}for (let i = 0; i < prelist.length; i++) , 500 * i);

}

樹和二叉樹 二叉樹遍歷的遞迴演算法

all right resvered 檔名稱 樹和二叉樹.cpp 作 者 鄭兆涵 樹和二叉樹 二叉樹遍歷的遞迴演算法 問題 實現二叉樹的先序 中序 後序遍歷的遞迴演算法,並對用 a b d,e h j,k l,m n c f,g i 建立的二叉樹進行測試。程式設計 標頭檔案 btree.h,包含定義...

二叉樹非遞迴演算法

程式小白,希望和大家多交流,共同學習 非遞迴二叉樹借用棧 使用鏈棧,使用它的原因 1.需要使用先進後出的儲存結構 2.需要儲存資料個數不定 三種遍歷儲存的雖然都是相同的資料型別,但是使用的目的不一樣,所以使用的位置不一樣 先序遍歷 根據給定的根節點,直接訪問根節點 左結點,有左孩子的結點有兩重身份 ...

演算法 遞迴 對稱二叉樹

根據對稱樹的特點,我們用兩個指標分別往左子節點和右子節點遞迴查詢 每次查詢時比較他們是否都為空,如果都不為空就比較是否值相等 如果值相等,就繼續檢查左節點的左節點和右節點的右節點 左節點的右節點和右節點的左節點 只要都相同就說明對稱,否則不對稱 我們使用乙個佇列,根據對稱樹的特點,每次分別將左子節點...