二叉樹中序遍歷

2021-06-29 06:56:11 字數 1158 閱讀 1969

訪問根結點的的左子樹,訪問根結點和訪問根結點的右子樹依次記作(l, d ,r)

中序遍歷(ldr)演算法:

①遍歷根結點的左子樹,

②訪問根結點

③遍歷根結點的右子樹

對於上面的圖,我們假定只有a, b, c三個結點,則中序遍歷結果為:

b           a         c 採用上節(二叉樹鏈式儲存和前序遍歷)中的遞迴推演

db        a         c

d     b   a         c

dg  b   a         c

d g b   a         c

dg b   a       ecf

最終中序遍歷結果:

d g b a e c f

**實現:

#include

#include

typedef char datatype;

typedef struct node

bitreenode;

/*初始化建立二叉樹的頭結點*/

void initiate(bitreenode **root)

/*若當前結點curr非空,在curr的左子樹插入元素值為x的新結點*/

/*原curr所指結點的左子樹成為新插入結點的左子樹*/

/*若插入成功則返回新插入結點的指標,否則返回空指標*/

bitreenode *insertleftnode(bitreenode *curr, datatype x)

bitreenode *insertrightnode(bitreenode *curr, datatype x)

/*列印結點資料內容函式*/

void visit(datatype item)

/*前序遍歷函式,訪問操作為visit函式*/

void preorder(bitreenode *t, void visit(datatype item))

}/*中序遍歷二叉樹,訪問操作為visit函式*/

void inorder(bitreenode *t, void visit(datatype item))

}int main()

二叉樹中序遍歷

二叉樹中序遍歷 非遞迴版本的中序遍歷用棧來實現。乙個元素出現在棧頂一次,這一次會被處理並出棧。trick 用乙個指標去記錄當前節點cur,如果cur left左側還未遍歷,就會將cur入棧並訪問cur left。一行很重要的 是cur cur right,這一句之後如果cur null,則說明棧頂元...

二叉樹先序遍歷和中序遍歷確定二叉樹

由於希望得到一顆二叉樹,所以返回值型別是乙個指向根節點的指標 表示得到了一顆二叉樹 btnode creatbt char pre,char int,int l1,int r1,int l2,int r2 引數列表有傳入的先序序列和後序序列和他們的開頭和結尾 由於是遞迴函式,先寫乙個遞迴出口,顯然是...

二叉樹的中序遍歷

對於學過資料結構的人來說,二叉樹和二叉樹上的中序遍歷都是再簡單不過的東西了。這道題就搞搞二叉樹好了,當然,不是一般的二叉樹 我們定義一種a二叉樹,它的節點內容可以是任乙個數字或者 只能作為葉子節點的內容。如下就是一棵合法定義的a二叉樹1 再來一棵不合法的a二叉樹2 根節點的左兒子的內容是 因此不應該...