《数据结构与算法》第四次 二叉树的创建、销毁、插入、删除、遍历等操作的实现

《数据结构与算法》第四次课内容安排

二叉树的创建、销毁、插入、删除、遍历等操作的实现(上)

实验目的:

1、熟练掌握二叉树的二叉链表的表示方法,能够编写构造二叉链表树的函数;

2、熟练掌握二叉树的各种遍历算法,能够编写各种遍历算法的递归和非递归函数。

实验内容:

改写课本p282页的linkedBinaryTree类的preOrder和inOrder两个成员函数,用非递归的方式解决该问题。

实验步骤:

改成随书代码 中的
void linkedBinaryTree::preOrder(binaryTreeNode *t)和
void linkedBinaryTree::inOrder(binaryTreeNode *t
两个成员函数。并使用随书代码里的

文件进行测试。

附加内容:
改写void linkedBinaryTree::makeTree(const E& element,
           linkedBinaryTree& left, linkedBinaryTree& right)函数或主函数,使程序可以手动输入二叉树元素,完成构建二叉链表树的过程。

实验过程:

江米条想让你看的理解难点(函数指针在本次试验中的使用):

在linkedBinaryTree.h中,用到了函数指针,preOrder()里面的“void(*theVisit)(binaryTreeNode*)”的(*the Visit)是一个函数指针,指向的是一个函数。后边的binaryTreeNode*是函数指针的参数,表示这个指针指向的函数的参数是一个binaryTreeNode*,即树的节点。

所以 当调用前序遍历输出函数(  preOrder(output)  ) 的时候,会调用前序遍历函数(  preOrder(output)  ),而这个前序遍历函数                       (  preOrder(output))会通过函数指针指向下面的输出函数(      output    (binaryTreeNode*)    ),进而输出   t ->  element 的内容。

在这里面,函数指针的作用就是为了写一个 output    (binaryTreeNode*)  让所有的输出都可以用这个输出函数而达到代码的最简化。

《数据结构与算法》第四次 二叉树的创建、销毁、插入、删除、遍历等操作的实现_第1张图片

二叉树的样子:

《数据结构与算法》第四次 二叉树的创建、销毁、插入、删除、遍历等操作的实现_第2张图片

 

建立树的关键代码(具体的可以自己看linkedBinaryTree.h):

template
void linkedBinaryTree::makeTree(const E& element,
           linkedBinaryTree& left, linkedBinaryTree& right)//一棵二叉树的三个元素,值,左子树,右子树,都是引用树节点
{
   root = new binaryTreeNode (element, left.root, right.root);
   treeSize = left.treeSize + right.treeSize + 1;

   
   left.root = right.root = NULL;
   left.treeSize = right.treeSize = 0;
}

主函数:

// test linked binary tree class

#include 
#include "linkedBinaryTree.h"

using namespace std;

int main(void)
{
   linkedBinaryTree a,x,y,z;
   y.makeTree(1,a,a);
   z.makeTree(2,a,a);
   x.makeTree(3,y,z);
   y.makeTree(4,x,a);
   cout << "Number of nodes = ";
   cout << y.size() << endl;
   cout << "height = ";
   cout << y.height() << endl;
   cout << "Preorder sequence is ";
   y.preOrderOutput();
   cout << "Inorder sequence is ";
   y.inOrderOutput();
   cout << "Postorder sequence is ";
   y.postOrderOutput();
   cout << "Level order sequence is ";
   y.levelOrderOutput();

   return 0;
}

代码链接:https://download.csdn.net/download/lzjstudy/10557174

如果有问题,请联系我 QQ:1239825268

备注 CSDN

共勉!

你可能感兴趣的:(《数据结构与算法》第四次 二叉树的创建、销毁、插入、删除、遍历等操作的实现)