二叉樹遍歷

2021-07-11 15:11:17 字數 2619 閱讀 5354

二叉樹遍歷

【簡介】:

二叉樹的遍歷就是從二叉樹的乙個結點(一般是根節點)出發,按照一定的規律訪問到該二叉樹的全部

結點,每個結點只訪問1次。

二叉樹巨集觀上由3部分組成,即根節點、左子樹、右子樹。二叉樹中沒有子結點       的結點叫做葉結點 。

對二叉樹的遍歷有3種方案:(1)先序遍歷、(2)中序遍歷、(3)後序遍歷。

【遍歷】

1.先序遍歷:

首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左、右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。

2.中序遍歷:

中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。在遍歷左、右子樹時,仍然先遍歷左子樹,再訪問根結 點,最後遍歷右子樹。

3.後序遍歷:

後序遍歷首先遍歷左子樹,然後遍歷右子樹,最後訪問根結點,在遍歷左、右    子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點。

注:

上圖有的結點只有左結點,有的只有右結點,都是事先自己定義的,自己輸        入時故意沒有的,不要以為是系統調整的。

上圖輸入:

abd#gj###eh###cf#i###

上圖的遍歷:

先序遍歷:a b d g j e h c f i

中序遍歷:d j g b h e a f i c

後序遍歷:j g d h e b i f c a

看了很多**,書上的,部落格上的,都是一部分一部分的散裝,發現了這個簡單易懂的**

**來自:

【**實現】:

#include#include#include#include#includeusing namespace std;

//二叉樹結點

typedef struct bitnode

bitnode,*bitree;

//按先序序列建立二叉樹

int createbitree(bitree &t)

else

return 0;

}//輸出

void visit(bitree t)

}//先序遍歷

void preorder(bitree t)

}//中序遍歷

void inorder(bitree t)

}//後序遍歷

void postorder(bitree t)

}/* 先序遍歷(非遞迴)

思路:訪問t->data後,將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,再先序遍歷t的右子樹。

*/void preorder2(bitree t)

else

}//while

}/* 中序遍歷(非遞迴)

思路:t是要遍歷樹的根指標,中序遍歷要求在遍歷完左子樹後,訪問根,再遍歷右子樹。

先將t入棧,遍歷左子樹;遍歷完左子樹返回時,棧頂元素應為t,出棧,訪問t->data,再中序遍歷t的右子樹。

*/void inorder2(bitree t)

else

}//while

}//後序遍歷(非遞迴)

typedef struct bitnodepost

bitnodepost,*bitreepost;

void postorder2(bitree t)

//左右子樹訪問完畢訪問根節點

while(!stack.empty() && (stack.top())->tag == 'r')

//遍歷右子樹

if(!stack.empty())

}//while

}//層次遍歷

void levelorder(bitree t)

//右子樹不空,將右子樹入隊

if(p->rchild != null)

}}int main()

/*abc##de#g##f###

上圖的輸入:abd#gj###eh###cf#i###

*/

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...

二叉樹遍歷

描述 華為實習生招聘,有一道類似如下的題目 給出二叉樹,如圖1所示 圖 1 二叉樹 要求給出中序遍歷的結果。下面分別就前序遍歷 中序遍歷 後序遍歷進行分析。規律 前序遍歷 根在前 子樹在根後且左子樹比右子樹靠前 中序遍歷 根在中 左子樹在根左邊,右子樹在根右邊 後序遍歷 根在後 子樹在根前且左子樹比...