设一棵二叉树以二叉链表表示,试编写有关二叉树的递归算法
(1)统计二叉树中度为1的节点个数
(2)统计二叉树中度为2的节点个数
(3)统计二叉树中度为0的节点(叶节点)个数
(4)统计二叉树的高度
(5)统计二叉树的宽度,即在二叉树的各层上具有结点数最多的那一层上结点总数
(6)计算二叉树中各节点中的最大元素值
(7)交换每个结点的左孩子结点和右孩子结点
(8)从二叉树中删去所有叶子结点
代码如下
#include <iostream>
#include "queue"
using namespace std;
class BinaryTreeNode
{
public:
int element;
BinaryTreeNode * lc;
BinaryTreeNode * rc;
BinaryTreeNode(int E){element=E;lc=rc=NULL;}
};
class BinaryTree
{
private:
BinaryTreeNode * root;
public:
BinaryTree(){root=NULL;}
BinaryTreeNode * Create(BinaryTreeNode *);
BinaryTreeNode * GiveRoot();
int Degrees0(BinaryTreeNode *);//度为0的结点个数
int Degrees1(BinaryTreeNode *);//度为1的结点个数
int Degrees2(BinaryTreeNode *);//度为2的结点个数
int Height(BinaryTreeNode * );//高度
int Width(BinaryTreeNode * , queue<BinaryTreeNode *>);//宽度
int Max(BinaryTreeNode *);//求出节点中最大的数据
void Swap(BinaryTreeNode *);//交换左右儿结点
void Delete(BinaryTre