二叉樹 遞迴

2021-09-11 03:13:34 字數 2602 閱讀 4065

完全二叉樹:只有最後一層不滿,其餘節點都有兩個孩子,並且最後一層的節點從左向右排列,如下圖

擴充二叉樹:每個節點都有兩個孩子,如圖

//類似dfs

cout<

>data<<

" ";

preorder_recursion

(bt-

>leftchild)

;preorder_recursion

(bt-

>rightchild)

;}

void

inorder_recursion

(bintree bt)

inorder_recursion

(bt-

>leftchild)

; cout<

>data<<

" ";

inorder_recursion

(bt-

>rightchild)

;}

void

postorder_recursion

(bintree bt)

postorder_recursion

(bt-

>leftchild)

;postorder_recursion

(bt-

>rightchild)

; cout<

>data<<

" ";

}

void

levelorder

(bintree bt)

//類似bfs

p=bt;

q.push

(bt)

;while

(!q.

empty()

)if(p->rightchild!=

null)}

}

bintree createbintree_recursion()

//輸入對應擴充套件二叉樹的先序

else

return bt;

}

#include

using

namespace std;

typedef

char datatype;

typedef

struct btreenode

bintreenode;

typedef bintreenode * bintree;

void

preorder_recursion

(bintree bt)

cout<

>data<<

" ";

preorder_recursion

(bt-

>leftchild)

;preorder_recursion

(bt-

>rightchild);}

void

inorder_recursion

(bintree bt)

inorder_recursion

(bt-

>leftchild)

; cout<

>data<<

" ";

inorder_recursion

(bt-

>rightchild);}

void

postorder_recursion

(bintree bt)

postorder_recursion

(bt-

>leftchild)

;postorder_recursion

(bt-

>rightchild)

; cout<

>data<<

" ";

}void

levelorder

(bintree bt)

p=bt;

q.push

(bt)

;while

(!q.

empty()

)if(p->rightchild!=

null)}

} bintree createbintree_recursion()

else

return bt;

}int

main()

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...

二叉樹 遞迴 非遞迴

include include include include using namespace std typedef struct node bintree typedef struct node1 btnode void creatbintree char s,bintree root 建立二叉...