#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
typedef struct BiNide{
char data;
struct BiNide *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T){
char ch;
cin>>ch;
if(ch=='#')
T=NULL;
else{
T=new BiTNode;
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
int Depth(BiTree T){
int a,b;
if(T==NULL)
return 0;
else{
a=Depth(T->lchild);
b=Depth(T->rchild);
if(a>b)
return (a+1);
else
return (b+1);
}
}
int PrintAtLevel(BiTree T,int number_Of_Depth){
if(T==NULL || number_Of_Depth<0)
return 0;
cout<<T->data<<" ";
return PrintAtLevel(T->lchild,number_Of_Depth-1)+PrintAtLevel(T->rchild,number_Of_Depth-1);
}
int NodeCount(BiTree T){
if(T==NULL)
return 0;
else
return NodeCount(T->lchild)+NodeCount(T->rchild)+1;
}
int m=0;
int count_Of_Leaf(BiTree T){
if(T==NULL)
return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
m++;
else{
count_Of_Leaf(T->lchild);
count_Of_Leaf(T->rchild);
}
return m;
}
void PreOrderTraverse(BiTree T){
if(T){
cout<<T->data<<" ";
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
cout<<T->data<<" ";
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data<<" ";
}
}
void ChangeLR(BiTree &T){
if(T==NULL)
return ;
else if(T->lchild==NULL&&T->rchild==NULL)
return ;
else{
BiTree temp;
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
ChangeLR(T->lchild);
ChangeLR(T->rchild);
}
int main(){
BiTree tree;
int number;
cout<<"请输入建立二叉链表的序列:\n";
CreateBiTree(tree);
number=Depth(tree);
cout<<"数的深度为:"<<number<<endl;
cout<<"按层遍历后的二叉树为:"<<endl;
PrintAtLevel(tree,number);
cout<<endl;
cout<<"树的结点个数为:"<<NodeCount(tree)<<endl;
cout<<"树的叶子结点个数为:"<<count_Of_Leaf(tree)<<endl;
cout<<"前序遍历二叉树后为:"<<endl;
PreOrderTraverse(tree);
cout<<endl;
cout<<"中序遍历二叉树后为:"<<endl;
InOrderTraverse(tree);
cout<<endl;
cout<<"后序遍历二叉树后为:"<<endl;
PostOrderTraverse(tree);
cout<<endl;
ChangeLR(tree);
cout<<"左右子树交换后前序遍历的二叉树为:"<<endl;
PreOrderTraverse(tree);
cout<<endl;
return 0;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理