《数据结构与算法》第四次课内容安排
二叉树的创建、销毁、插入、删除、遍历等操作的实现(上)
实验目的:
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
所以 当调用前序遍历输出函数( preOrder(output) ) 的时候,会调用前序遍历函数( preOrder(output) ),而这个前序遍历函数 ( preOrder(output))会通过函数指针指向下面的输出函数( output (binaryTreeNode
在这里面,函数指针的作用就是为了写一个 output (binaryTreeNode
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;
}
如果有问题,请联系我 QQ:1239825268
备注 CSDN
共勉!