二叉樹演算法

2021-09-29 14:25:48 字數 3059 閱讀 9149

#include

#include

#define maxsize 20

#define max 20

int count =0;

int count1 =0;

int depth;

int du1 =0;

int du2 =0;

//樹的儲存結構

typedef

struct nodebinode,

*bitree;

//棧的儲存結構

typedef

struct seqnodeseqstack;

typedef

struct

csequene;

//初始化

csequene* initsequene (

)//入隊

intinsequene

(csequene *q,bitree p)

//出隊

intoutquene

(csequene* q,bitree *p)

//判空

intemptysequene

(csequene *q)

else

}//初始化棧

seqstack*

initstack()

//判空

intisempty

(seqstack *s)

else

}//出棧並且讀取棧頂元素

void

pop(seqstack *s,bitree *p)

//入棧

void

push

(seqstack* s,bitree p)

//取棧頂元素

void

top(seqstack *s,bitree *p)

//二叉樹的建立使用了二級指標,便於將左右孩子的位址傳給函式creattree(),方便了函式的遞迴呼叫

void

creattree

(bitree *root)

else

}//遞迴先序遍歷二叉樹

void

preorder

(bitree root)

}//遞迴中序遍歷二叉樹

void

inorder

(bitree root)

}//遞迴後序遍歷二叉樹

void

postorder

(bitree root)

}//先序非遞迴遍歷二叉樹

void

preorder1

(bitree root)if(

isempty

(s))}}

//中序非遞迴遍歷二叉樹

void inorder1 (bitree root)if(

isempty

(s))}}

//後序非遞迴遍歷二叉樹

void

postorder1

(bitree root)if(

isempty

(s))

else}}

}//樹狀輸出二叉樹

void

output

(bitree root,

int h)

output

(root->rchild,h+1)

;for

(int i =

0;i < h;i++

)printf

("%c\n"

,root->data)

;output

(root->lchild,h+1)

;}//統計二叉樹中的結點數目

void

preordertongjijiedian

(bitree root)

}//輸出葉子節點

void

inordershuchuyezi

(bitree root)

inordershuchuyezi

(root->rchild);}

}//輸出葉子結點的個數(遞迴的思想,同時設定全域性變數)

void

yezijiediangeshu

(bitree root)

yezijiediangeshu

(root->rchild);}

}//輸出葉子節點的個數二(非遞迴運用了函式的返回值)

intyezijiediangeshu2

(bitree root)

if(root->lchild ==

null

&& root->rchild ==

null

) nl =

yezijiediangeshu2

(root->lchild)

; nr =

yezijiediangeshu2

(root->rchild)

;return

(nl+nr);}

//統計度為一的結點個數

void

tongjidu1

(bitree root)

tongjidu1

(root->rchild);}

}//統計度為一的結點個數

void

tongjidu2

(bitree root)

tongjidu2

(root->rchild);}

}//求二叉樹的高度

void

treedepth

(bitree root,

int h)

treedepth

(root->lchild,h+1)

;treedepth

(root->rchild,h+1)

;}}//二叉樹的層次遍歷(設定了佇列),先訪問的他的孩子也應該先訪問。

void

levelorder

(bitree root)

if(p->rchild !=

null)}

}int

main()

二叉樹演算法

include include include define elementtype int node structure constructor typedef struct bt binarytreenode,btroot function declear inorder btroot root...

二叉樹演算法

二叉樹的遍歷演算法 1.先序遍歷 對每乙個節點將其看作根節點按照根左右的順序進行遍歷。示例 void preordertree node root 先序遍歷二叉樹 return 2.中序遍歷 對每乙個節點將其看作根節點按照左根右的順序進行便利。示例 void inordertree node roo...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...