此處採用的是遞迴法求出二叉樹的先序,中序,後序遍歷,當然也可以用非遞迴演算法,利用棧求解,但對比覺得用遞迴更簡單 。
此題的思考思路如下,1、寫好標頭檔案 2、定義結構體 ,思考二叉樹中 有哪些屬性,都可以放入二叉樹的結構體中,(結構體可以用 鍊錶儲存,
所以對於節省空間是非常好的手段哦) 3、寫主函式,主函式中當然要建立結構體的物件,然後建立結構體,然後呼叫先序,中序,後序函式,
當然此時的這些函式名都會出現紅色的波浪線,因為你還沒有定義這些函式呀,既然使用了,當然要去建立 4、去建立建立函式,先序函式,中序函式,
後序函式,再根據這個函式的要求,即怎麼做才會得到這個結果的思路轉換成高階語言,如:建立函式,你首先當然要有元素,才能去構建二叉樹 所以
要先傳入元素,char ch = getchar(); 這句就代表元素的輸入,也等價於 char ch; cin>>ch; 然後就要判斷從外界得到的值是什麼了,可以是乙個具體的
值也可以是某個特殊的 字元,當然你可以用特殊的字元來代表該位置的元素為空, 如果不為空,則你可以先為這樹分配空間,把值賦值到對應的位置上
很容易發現建立左右孩子跟 建立某個結點是一樣的,所以可以呼叫本身去建立左右孩子,先序,中序,後序函式也是這樣思考,你需要先有思路,再把
//二叉樹的先序,中序,後序遍歷
#include
#include
using namespace std;
//二叉樹結構體的定義
typedef struct node //node為結構體的名稱
node,*bitree; //bitree是結構體的指標
//建立函式,構建二叉樹
void create(bitree &bt)
else
}//列印函式,輸出正在訪問位置的元素值
void visit(bitree bt)
//先序函式
void preoder(bitree bt)
}//中序遍歷
void inoder(bitree bt)
}void postorder(bitree bt)
}int main()
二叉樹先序 中序 後序遍歷
題目 用遞迴和非遞迴方式,分別按照二叉樹先序 中序和後序列印所有的節點。我們約定 先序遍歷順序為根 左 右 中序遍歷順序為左 根 右 後序遍歷順序為左 右 根。遞迴實現 遞迴遍歷二叉樹 先序 public void preorderrecur node head system.out.println...
二叉樹先序遍歷 中序遍歷 後序遍歷
輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...
二叉樹先序遍歷 後序遍歷 中序遍歷
從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...