/*以二叉链表作为二叉树的存储结构:
完成 1:统计二叉树的叶结点个数.
完成 2:判别两棵树是否相等
完成 3:交换二叉树每个节点的左孩子和右孩子
4:设计二叉树的双序遍历(双序遍历就是指对于二叉树的每个节点,先访问这个节点
,再按双序遍历她的左子树,然后在访问这个节点,然后在按双序遍历它右子树 )
5:计算二叉树的最大宽度(就是所有层中结点个数最大值)
6:用按层次遍历二叉树的方法,统计树中度为1的节点数目
7:求二叉树第一条最长路径的长度,并输出次路径上个节点值
完成 8:输出二叉树中从每个叶子节点到根节点的路径
*/
#include <iostream>
using namespace std;
#define MAXSIZE 100 //栈和队列中需要的长度
//***********节点类**************
class Tree;
class Node
{
private:
int Data;
Node* Lchild;
Node* Rchild;
public:
Node()
{
Lchild = NULL;
Rchild = NULL;
}
int Return_Data(){return Data;} //返回数据域
Node* Return_Lchild(){return Lchild;} //返回做孩子
Node* Return_Rchild(){return Rchild;} //返回右孩子
friend class Tree; //声明Node类为Tree的友元类
};
//**********Tree类***************
class Tree
{
private:
int Leaf_Numbers;
Node* Root;
int Front; //栈顶指针
int Rear; //栈底指针
Node* NodeStack[MAXSIZE];
public:
Tree()
{
Leaf_Numbers = 0;
Root = NULL;
Front = -1;
Rear = 0;
for(int i = 0; i < MAXSIZE; i++)
{
NodeStack[i] = NULL;
}
}
//************函数**************
void CreatTree(Node* &); //先序递归创建节点
void TheCreatTree();
void TraveFront(Node* ); //先序遍历
void TheTraveFront();
void Numbers_Leafs(Node*); //计算叶子节点数
void TheNumbers_Leafs();
int Return_LeafNums();
Node* Return_Root(){return Root;} //返回树的头结点
void ExchangeLR(Node*); //交换二叉树的左右子树
void T
c++二叉树(统计叶节点,判断两颗二叉树是否相等,交换二叉树的左孩子右孩子,输出叶子到根节点的路径)
最新推荐文章于 2022-05-10 07:04:28 发布
这是一个C++程序,用于处理二叉树的各种操作,包括统计叶节点数量、判断两棵二叉树是否相等、交换二叉树每个节点的左右孩子、输出叶子到根节点的路径等。程序使用二叉链表作为存储结构,并实现了先序遍历、双序遍历、层次遍历等算法。
摘要由CSDN通过智能技术生成