二叉樹的三種遍歷,包括遞迴與非遞迴,c 語言

2021-08-02 08:33:44 字數 1084 閱讀 9974

首先,二叉樹的三種遍歷使用遞迴來解決非常簡單。下面只給出**。

第二,如果不能使用遞迴來做,就要自己用queue或者stack這樣的資料結構來實現遞迴的過程。

下面的**是用stack來實現的。先序遍歷用stack實現很簡單,寫了一種方法。中序遍歷和後序遍歷就要有點思考的過程了。

中序遍歷我寫了三種,後序遍歷寫了兩種方法。

struct treenode 

};

//二叉樹遍歷用遞迴和非遞迴

void preorderrecu(treenode *head,vector&res)

void inorderrecu(treenode *head, vector&res)

void postorderrecu(treenode *head, vector&res)

void preorderstack(treenode *head, vector&res)

return;

} void inorderstack(treenode *head, vector&res)

while (!sta.empty())

}} }

void inorderstack_2(treenode *head, vector&res)

else

} }void inorderstack_3(treenode *head, vector&res)

else if (top->left && !top->right)

else

}else if (!top->left && top->right)

else

}else

else

}} }

void postorderstack(treenode *head, vector&res)

while (!s2.empty())

} void postorderstack_2(treenode *head, vector&res)

else

else

}} }

二叉樹的三種遍歷方式,含demo(遞迴與非遞迴)

什麼是二叉樹 乙個遞迴的樹形資料結構,每個節點最多有兩個子節點 二叉樹一般都是二分查詢樹,每個節點的值大於它左子節點的值,小於它右子節點的值 遞迴遍歷 前序遍歷 先訪問根節點,再訪問左子節點,最後訪問右子節點 上圖中前序遍歷結果 30 20 5 28 50 38 58 中序遍歷 先訪問左子節點,再訪...

二叉樹的三種非遞迴遍歷

一.前序遍歷 前序遍歷按照 根結點 左孩子 右孩子 的順序進行訪問。1.遞迴實現 void preorder1 bintree root 遞迴前序遍歷 2.非遞迴實現 根據前序遍歷訪問的順序,優先訪問根結點,然後再分別訪問左孩子和右孩子。即對於任一結點,其可看做是根結點,因此可以直接訪問,訪問完之後...

二叉樹的三種非遞迴遍歷

遞迴演算法和非遞迴演算法的轉換 可以借助棧,將二叉樹的遞迴演算法轉換為非遞迴演算法,下面以中序遍歷為例給出中序遍歷的非遞迴演算法。先掃瞄 並非訪問 根結點的所有左結點並將他們一一進棧。然後出戰乙個結點 p 顯然結點 p沒有左孩子結點或者左孩子結點均已訪問過 則訪問它。然後掃瞄該結點的有孩子結點,將其...