网站首页 > 基础教程 正文
先序遍历 中序遍历 后序遍历(都是相对根来说的,先左子树,后右子树是一定的)
树的遍历
求叶子结点
树的高度
拷贝二叉树
#include<stdlib.h>
#include<stdio.h>
//二叉链表示
struct BiTNode
{
int data;
struct BiTNode *Lchild, *rchild;
};
typedef struct BiTNode BiTNode;
typedef struct BiTNode* BiTTree;
void preOrder(BiTNode *root)
{
if (root == NULL)
{
return;
}
printf("%d", root->data);
//
preOrder(root->Lchild);
//
preOrder(root->rchild);
}
void inOrder(BiTNode *root)
{
//中序
}
void postOrder(BiTNode *root)
{
//后序
}
void coutLeaf2(BiTNode*T,int sum)
{
if (T != NULL)
{
if (T->Lchild == NULL&&T->rchild == NULL)
{
(*sum)++;//把全局变量变成参数
}
if (T->Lchild)
{
coutLeaf(T->Lchild,sum);
}
if (T->rchild)
{
coutLeaf(T->rchild,sum);
}
}
}
void coutLeaf(BiTNode*T)
{
if (T != NULL)
{
if (T->Lchild == NULL&&T->rchild == NULL)
{
sum++;
}
if (T->Lchild)
{
coutLeaf(T->Lchild,sum);
}
if (T->rchild)
{
coutLeaf(T->rchild,sum);
}
}
}
int Depth(BiTNode*T)//求高度就是,求左边 求右边 比大小 取大的+1
{
int deptleft = 0;
int deptright = 0;
int deptval = 0;
if (T == NULL)
{
deptval = 0;
return deptval;
}
deptleft = Depth(T->Lchild);
deptright = Depth(T->rchild);
deptval = 1 + (deptleft > deptright? deptleft : deptright);
return deptval;
}
BiTNode*CopyTree(BiTNode)//拷贝树
{
BiTNode *newNode = NULL;
BiTNode *newLp = NULL;
BiTNode *newRp = NULL;
if (T == NULL)
{
return NULL;
}
if (T->lchild != NULL)
{
newLp = CopyTree(T->Lchild);
}
else
{
newLp = NULL;
}
if (T->rchild != NULL)
{
newRp = CopyTree(T->Rchild);
}
else
{
newRp = NULL;
}
//malloc根节点
newNode =(BiTNode*) malloc(sizeof(BiTNode));
if (newNode == NULL)
{
return NULL;
}
newNode->Lchild = newLp;
newNode->rchild = newRp;
newNode->data = T->data;
return newNode;
}
void main()
{
BiTNode t1, t2, t3, t4, t5;
memset(&t1, 0, sizeof(BiTNode));
memset(&t2, 0, sizeof(BiTNode));
memset(&t3, 0, sizeof(BiTNode));
memset(&t4, 0, sizeof(BiTNode));
memset(&t5, 0, sizeof(BiTNode));
t1.data = 1;
t2.data = 2;
t3.data = 3;
t4.data = 4;
t5.data = 5;
//建立关系
t1.Lchild = &t2;
t1.rchild = &t3;
t2.Lchild = &t4;
t3.Lchild = &t5;
//树的遍历
printf("%d\n", Depth(&t1));//高度
printf("preOrder\n");
preOrder(&t1);
printf("inOrder\n");
preOrder(&t1);
printf("postOrder\n");
preOrder(&t1);
return;
}
猜你喜欢
- 2024-10-19 盘点数据结构的应用场景 数据结构主要研究什么应用问题中的数据
- 2024-10-19 c++之stl底层数据结构 c++stl库详解教程
- 2024-10-19 C语言数据结构实现:迷宫问题的通用解法
- 2024-10-19 Golang数据结构可视化库DataViz golang data race
- 2024-10-19 C/C++编程笔记:数据结构二叉树查找前序、中序、后序、层序遍历
- 2024-10-19 当 Java 遇上 C++: 使用 JNA 传递复杂数据结构
- 2024-10-19 C++并发编程实战:基于锁的并发数据结构
- 2024-10-19 《大话数据结构》C++实现二叉平衡树的建立
- 2024-10-19 《大话数据结构》C++实现七大排序算法详细代码
- 2024-10-19 数据结构(C++版)邓俊辉 学习笔记——第一章要点摘录
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)