二叉樹的非遞迴建立

2021-06-18 00:55:29 字數 2653 閱讀 9345

問題描述:非遞迴建立如下圖所示的二叉樹:

*  名 稱: 建立二叉樹(非遞迴)

* 作 者: brooke gao

* 時 間: 2013/8/21

* */

#include#include#include#define stacksize 50

#define bitree_size(tree) ((tree)->size)

#define bitree_root(tree) ((tree)->root)

#define bitree_left(node) ((node)->left)

#define bitree_right(node) ((node)->right)

/* * 定義二叉樹結點以及二叉樹的結構

**/typedef struct bitreenode_

bitreenode;

typedef struct bitree_

bitree;

/* * 定義棧的結構

**/typedef struct stack_

stack;

void stack_init(stack *stack)

void push(stack *stack, bitreenode *node)

int stack_empty(stack *stack)

bitreenode* pop(stack *stack)

}bitreenode* get_stack_top(stack *stack)

void bitree_init(bitree *tree)

//給樹tree的某個結點node插入資料域為data的左子樹

int bitree_ins_left(bitree *tree, bitreenode *node, const char data)

else

if( null == (new_node = (bitreenode *)malloc(sizeof(bitreenode))) )

return -1;

new_node->data = data;

new_node->left = null;

new_node->right = null;

*position = new_node;

tree->size++;

return 0;

}//給樹tree的某個結點node插入資料域為data的右子樹

int bitree_ins_right(bitree *tree, bitreenode *node, const char data)

else

if( null == (new_node = (bitreenode *)malloc(sizeof(bitreenode))) )

return -1;

new_node->data = data;

new_node->left = null;

new_node->right = null;

*position = new_node;

tree->size++;

return 0;

}// 先序遍歷函式

void pre_order(const bitreenode *node)

}// 中序遍歷函式

void in_order(const bitreenode *node)

}// 後序遍歷函式

void end_order(const bitreenode *node)

}int main()

while(!stack_empty(&stack))

}} else

else

}} printf("-----先序遍歷二叉樹-----\n");

pre_order(tree.root);

putchar('\n');

printf("-----中序遍歷二叉樹-----\n");

in_order(tree.root);

putchar('\n');

printf("-----後序遍歷二叉樹-----\n");

end_order(tree.root);

putchar('\n');

return 0;

}

執行結果:

注:最近複習到樹一章,發現嚴蔚敏的《資料結構》一書關於二叉樹的建立只有遞迴演算法,而沒有非遞迴演算法。

但想著只要是遞迴能實現的非遞迴一定能實現,所以昨天開始試著自己看能不能寫出來,但折騰了老半天

還是錯誤百出,最後乾脆沒頭緒了。後來在網上找了一下,用非遞迴建立二叉樹的很少,僅有的幾個思路不

是很清晰且有些執行起來有些問題。今天經@zhao4zhong1老師的推薦,看了《演算法精解--c語言描述》一

書有關二叉樹的一章,總算是找到了非遞迴建立的方法,故有如上的實現方法。

非遞迴建立二叉樹

通過二叉鍊錶建立二叉樹,二叉鍊錶的節點結構如下 template class t struct binode 二叉樹類的結構如下 template class t class bitree 二叉樹建立的過程如下圖所示 可以利用棧來實現非遞迴建立,另外還需要建立一種棧節點結構,該結構包括 注意 sta...

二叉樹的非遞迴建立

新手一枚,希望記下自己寫的 希望各位親能夠給我提出意見和建議 include include define max 999 max表示結點是否置為空 define max size 100 棧的最大容量 typedef int elemtype typedef struct treenodetree...

二叉樹 遞迴 非遞迴

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