二叉樹前序遍歷的迭代實現

2021-07-24 02:17:52 字數 692 閱讀 3633

#include #include struct bintreenode;

//以下**用於建樹,便於測試中序遍歷程式是否正確

struct bintreenode* createnode(int data)

return temp;

}struct bintreenode* findnode(struct bintreenode* bintree,int data)//查詢

//假設每個節點值不同

#define left 1

#define right 0

struct bintreenode* insertnode(struct bintreenode* bintree,int loc,int dir,int data)//插入節點,loc代表插入的數的父節點的值,dir表示方向

return bintree;

}//二叉樹前序遍歷的迭代實現,用到棧

/*思路:

遇到乙個節點,先訪問,然後把他壓棧,並去遍歷他的左子樹;

當左子樹遍歷結束,從棧頂彈出這個節點;

按其右指標去中序遍歷該節點的右子樹;

*/void proordertrversal(struct bintreenode* bintree)

if(top>=0)

}}int main()

二叉樹前序遍歷

樹的前序遍歷 根左右 可以設計乙個棧來實現 首先讓根root入棧,然後root出棧,pop掉棧頂的元素,列印root,然後把root的右孩子入棧,左孩子入棧,讓棧頂的元素變成新的root,pop掉棧頂的元素,列印root,然後把root的右孩子入棧,左孩子入棧,重複此步驟 include inclu...

LeetCode基礎 二叉樹 前序遍歷

前序 根 左 右 遞迴實現 public class solution return result 非遞迴實現 建立乙個棧,把 root 結點入棧。棧不為空時就執行下面的流程。2.1.從棧中彈出乙個元素,並輸出這個元素。2.2.把彈出元素的右子結點入棧。2.3.把彈出元素的左子結點入棧。public...

二叉樹前中後序遍歷迭代實現

二叉樹遍歷迭代實現 迭代用棧實現 遞迴的原理就是棧,每次呼叫乙個方法就會開闢乙個棧幀,而每個棧幀的返回順序也是按照後進先出的順序。所以基於這個原理,任何遞迴能解決的問題都可以轉換為迭代去實現。只需記住一點 棧是先進後出。前序是根 左 右,那麼棧的入棧順序是根 此時進行出棧操作並新增到結果 右 左 中...