二叉树的函数实现

Posted 小潘的CS学习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的函数实现相关的知识,希望对你有一定的参考价值。

二叉树的创建是一个递归的过程,创建过程中如果先创建根结点,再创建根结点的左子树,最后再创建根结点的右子树的方式称为先序创建.需要注意的是,创建二叉树的递归函数需要出口,我们在程序中设定 # 作为空结点的声明,即如果遇到 # 则意味着该结点为空,不为其分配内存空间:



二叉树的中序创建如上图所示,在此我们介绍两种函数实现,分别以字符串形式创建的 void PreOrderCreate_str(BiTree& root, const char*& str) 函数和以输入形式创建的 void PreOrderCreate_input(BiTree& root) 函数:

BiTree AskNode(ElemType data){ BiTree BiNode = (BiTree)malloc(sizeof(BiTreeNode)); if (NULL == BiNode) exit(OVERFLOW); BiNode->data = data; BiNode->lchild = BiNode->rchild = NULL;
return BiNode;}
//先序创立二叉树:先建立根结点 再建立左子树 最后建立右子树void PreOrderCreate_str(BiTree& root, const char*& str){ if ('#' == *str) //以 # 作为空结点 { str++; root = NULL; } else { root = AskNode(*str); str++; PreOrderCreate_str(root->lchild, str); PreOrderCreate_str(root->rchild, str); }
return;}//每次使用一个字符 就需要使用下一个字符创建二叉树 相应的传入字符串也要改变
void PreOrderCreate_input(BiTree& root){ ElemType c;
printf("please enter the data(# means NULL):"); c = getchar(); getchar(); //除去换行符 if ('#' == c) root = NULL; else { root = AskNode(c); printf("please enter the left child of %c,", c); PreOrderCreate_input(root->lchild); printf("please enter the right child of %c,", c); PreOrderCreate_input(root->rchild); }
return;}

以上是关于二叉树的函数实现的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的遍历:迭代实现

二叉树的遍历:迭代实现

二叉树的函数实现

遍历二叉树的递归与非递归代码实现

二叉树的前序中序后序遍历-非递归-使用同一段代码实现

两万字硬核解析树与二叉树所有基本操作(包含堆,链式二叉树基本操作及测试代码,和递归函数的书写方法)