首页 > 编程语言 >数据结构与算法-树

数据结构与算法-树

时间:2022-10-31 00:22:06浏览次数:35  
标签:Right void BT 算法 遍历 数据结构 BinTree 节点

树的表示与术语

节点的度、树的度、叶子节点、父亲节点、兄弟节点、堂兄节点、祖先节点、子孙节点、节点层次、树的深度、路径、路径长度、分支...

二叉树

二叉树的性质

  • 第n层的节点数\(2^n+1\)
  • 前n曾节点数\(2^{n-1}\)
  • n个节点的深度\([log_2n]+1\)
  • \(n_0=n_2+1\)

二叉树的定义

typedef struct TNode *Position;
typedef Position BinTree;
struct TNode{
    ElementType Data;
    BinTree Left;
    BinTree Right;
};

二叉树的遍历

  • 递归中序遍历
void InorderTraversal( BinTree BT ) {
    if (BT) {
        InorderTraversal(BT->Left);
        printf(" %c", BT->Data);
        InorderTraversal(BT->Right);
    }
}
  • 递归先序遍历
void PreorderTraversal( BinTree BT ) {
    if (BT) {
        printf(" %c", BT->Data);
        PreorderTraversal(BT->Left);
        PreorderTraversal(BT->Right);
    }
}
  • 递归后序遍历
void PostorderTraversal( BinTree BT ) {
    if (BT) {
        PostorderTraversal(BT->Left);
        PostorderTraversal(BT->Right);
        printf(" %c", BT->Data);
    }
}
  • 非递归中序遍历
void InorderTraversal(BinTree BT) {
	Position T = BT;
	Stack S = CreateStack();
	while (T || !S.IsEmpty()) {
		while (T) {
			Push(S, T);
			T = T->Next;
		}
		T = Pop(S, T);
		Visit(T);
		T = T->Right;
	}
}
  • 非递归先序遍历
void PreorderTraversal(BinTree BT) {
	Position T = BT;
	Stack S = CreateStack();
	while (T || !S.IsEmpty()) {
		while (T) {
			Push(S, T);
			Visit(T);
			T = T->Next;
		}
		T = Pop(S, T);
		T = T->Right;
	}
}
  • 层序遍历
void LevelorderTraversal( BinTree BT ) {
    BinTree T;
    BinTree Q[20];
    int front = 0, rear = 0;
    if (!BT) return ;
    Q[rear ++] = BT;
    while (front != rear) {
        T = Q[front ++];
        printf(" %c", T->Data);
        if (T->Left) Q[rear ++] = T->Left;
        if (T->Right) Q[rear ++] = T->Right;
    }
}

标签:Right,void,BT,算法,遍历,数据结构,BinTree,节点
From: https://www.cnblogs.com/ivvodocuments/p/16842832.html

相关文章

  • 实验一 :决策树算法实验
    实验一:决策树算法实验【实验目的】理解决策树算法原理,掌握决策树算法框架;理解决策树学习算法的特征选择、树的生成和树的剪枝;能根据不同的数据类型,选择不同的决策树算......
  • 实验一:决策树算法实验
    实验一:决策树算法实验【实验目的】理解决策树算法原理,掌握决策树算法框架;理解决策树学习算法的特征选择、树的生成和树的剪枝;能根据不同的数据类型,选择不同的决策树算......
  • 【数据结构】(一)线性表
    约定:Status是函数的返回值类型,其值是函数结果状态代码typedef描述存储结构的类型定义ElemType表示数据元素类型   一.顺序表1.1顺序表的初始化动态分......
  • 实验一:决策树算法实验
    【实验目的】理解决策树算法原理,掌握决策树算法框架;理解决策树学习算法的特征选择、树的生成和树的剪枝;能根据不同的数据类型,选择不同的决策树算法;针对特定应用场景及......
  • 算法为什么难学,来了解一下
    (如何学习算法的)算法为什么难学很多人感叹算法怎么这么难学?一个原因就是算法本身就有一定的复杂性另一个原因可能就是讲的不到位,没有很好的理解。算法面临的困难是什......
  • C++求高精度pi(2)高斯-勒让德算法
    C++分析参考目前求π的算法中哪种收敛最快?-知乎(zhihu.com)中@byoshovel答主的回答,有这些比较容易想到的方法对于我们的任务来说,拉马努金公式和加强鬼畜公式和BBP......
  • 感知机学习算法的原始形式 | 机器学习随笔
    根据《统计学习方法第二版》中2.3.1部分,使用python编写了感知机学习算法的原始形式,具体代码如下:importnumpyasnpdefperceptron_raw():data=np.array(......
  • 【数据结构-数组】数组的相关算法
    目录1无序数组的排序——快速排序1.1升序排序1.2降序排序2有序数组的查找——折半查找(二分查找)2.1升序数组的查找2.2降序数组的查找3有序数组的合并——归并思想3.1......
  • 基于鲸鱼优化算法的5G信道估计(Matlab代码实现)
    ......
  • 基于改进人工蜂群算法的K均值聚类算法(Matlab代码实现)
    ......