三、
详细设计:
1. PBinTreeNode Create_BinTreeNode(void)
我们定义一个指向二叉树结点类型的指针 PBinTreeNode,然后,申请一个二叉树结点
大小的空间,对左右子结点赋为空。
定 义 一 个 指 向 二 叉 树 结 点 的 指 针 的 指 针 即 : BinTreeNode ** pbtree, 或 者 是 :
PBinTreeNode *pbtree;用于存放树的根结点,同时,将我们创建的二叉树的地址传给它即:
*pbtree=Create_BinTree();
首先我们定义一个 DataType 类型的变量 i,用于存放我们输入的字符(即作为缓冲区),
并用 scanf 函数去接收它,由于使用 scanf 函数时,会出现吸收我们输入的回车字符,并将
会车作为接收的字符的情况发生,为了避免这种情况,我们用函数 fflush(stdin)将缓冲区的
字符全部冲掉,然后再吸收我们输入的字符,就可以完全避免此类问题的发生。我们定义我
们输入的字符是从 a-z 或者是 A-Z,用字符@为我们结束当前结点左或者右结点的字符,然
后递归调用左右子树,此时我们将一棵二叉树全整的创建出来了。
4.用先根的方法遍历一棵二叉树
先访问根结点,打印出它里面的信息,然后递归调用左子树和右子树。
5.用中根的方法遍历一棵二叉树
先递归调用左子树,打印出里面的信息,在打印出根结点信息,然后递归调用右子树,
打印出里面的信息。
先递归调用左子树,打印出里面的内容,然后递归调用右子树,打印出里面的内容,然
后是根结点的内容。
先递归调用右子树,如果结点不为空的话,空格数加5,如果为空的话,就打印出右子
树的内容,然后递归调用左子树。
如果当前结点的左右子树都为空的话,就打印出此结点的信息,如果左子树不为空的话,
递归调用左子树,如果右子树不为空的话,递归调用右子树。
9.释放我们所申请的所有结点空间
如果当前的左子树不为空,则遍历左子树,如果右子树不为空的话,则遍历右子树,如
果都不位空的话,分别调用左右子树,如果左右都为空的话,就释放左右结点空间,并将当
前结点置为空。
先创建好我们要的二叉树,之后,我们就可以对此而二树进行多种操作,我们定义了6
种集合操作,并对用户输入的信息进行检测,正确的提示出错信息,如果选择的是我们定义
的操作之一的话,对应的我们设置出不同的 case 语句。如果我们选择的是释放所有的结点
空间的话,我们需要屏蔽掉所有的菜单信息,提示用户重新创建一棵二叉树,并对它进行重
新操作。
如果我们选择退出,但是没有选择释放掉所有的节点空间时,我们需要考虑到此类的情
形,应调用 void freeAllNodes(PBinTreeNode pbnode)自动的释放掉所有的结点空间,正常的
退出。
评论0
最新资源