先序便利二叉樹非遞迴演算法如何理解

2021-05-05 18:40:18 字數 561 閱讀 8790

1樓:

遞迴方式:先訪問根,再訪問左子樹(遞迴),再訪問右子樹(遞迴)

非遞迴:

當前節點=root;

迴圈(當前節點不為空)

訪問當前節點。--先根,而且處理完後不在需要

如果有右子樹,push (右子樹)-- 表明在左子樹全部處理完後再處理

如果有左子樹,當前節點為左子樹,continue - 表明優先處理左子樹

如果沒有子樹,當前節點=pop(),continue - 表明一顆子樹已經處理完了,需要從堆疊裡面把以前記得需要處理的再拿出來。

總的來說,非遞迴演算法是利用堆疊,將不是馬上要處理的東西放到堆疊裡面,當需要處理的東西不能直接索引的時候。從堆疊中一個再挖出來處理。

2樓:匿名使用者

首先先序遍歷二叉樹 ,你要搞清楚訪問先後順序是:根節點->左子樹->右子樹;

然後的話,棧就是把結點一個個壓入棧中,碰到左子樹中最左下角的結點的時候,從棧中取出一個結點(你可以理解為是往上一層,回到它的父節點那裡去),然後檢查有無右子樹,有的話,繼續壓棧,依此類推。。。。。。。

二叉樹的層次遍歷演算法,二叉樹層次遍歷怎麼進行?

建立一個佇列q 將根放入佇列 while 佇列非空 求用c語言實現二叉樹層次遍歷的遞迴演算法,謝謝!二叉樹層次遍歷怎麼進行?設計一個演算法層序遍歷二叉樹 同一層從左到右訪問 思想 用一個佇列儲存被訪問的當前節點的左右孩子以實現層序遍歷。void hierarchybitree bitree root...

用前序非遞迴遍歷二叉樹求樹中葉節點個數

include include define stack init size 100 define stackincrement 10typedef struct bitnodebitnode,bitree 樹的資料結構typedef struct sqstacksqstack 棧的資料結構 voi...

求用C語言寫的建立二叉樹。並且先序中序後序遍歷這個二叉樹

include include include 二叉樹資料結構定義 typedef struct binodebitnode,bitree 遞迴法建立二叉樹 void createbitree bitree bt else 遞迴法先序遍歷二叉樹 void preordertree bitree ro...