博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的基本操作
阅读量:4183 次
发布时间:2019-05-26

本文共 2219 字,大约阅读时间需要 7 分钟。

定义二叉树结构
typedef char BTDataType;typedef struct BinTreeNode{     BTDataType _data;//当前节点值域    struct BinTree* _left;//指向当前节点左孩子    struct BinTree* _right;//指向当前节点右孩子}BTNode,*PBTNode;

遵循某种次序,遍历二叉树中的所有节点,使得每个结点被访问一

次,而且仅访问一次。
“访问”:即对结点施行某些操作。

若规定VLR分别代表:遍历根节点、遍历根节点的左子树、遍历根节点的右子树,则有:

前序:VLR
中序:LVR
后序:LRV

二叉树的遍历 (递归版本)
//二叉树的前序遍历(根->左->右)void PreOrder(PBTNode pRoot){    if (pRoot)    {        printf("%c ", pRoot->_data);        PreOrder(pRoot->_left);        PreOrder(pRoot->_right);    }} //二叉树的中序遍历(左->根->右)void InOrder(PBTNode pRoot){    if (pRoot)    {        InOrder(pRoot->_left);        printf("%c ", pRoot->_data);        InOrder(pRoot->_right);    }}//二叉树的后序遍历(左->右->根)void PostOrder(PBTNode pRoot){    if (pRoot)    {        PostOrder(pRoot->_left);        PostOrder(pRoot->_right);        printf("%c ", pRoot->_data);    }}
求二叉树节点个数
//求二叉树节点个数int SizeBinTree(PBTNode pRoot){    if (pRoot == NULL)        return 0;    return SizeBinTree(pRoot->_left)+SizeBinTree(pRoot->_right)+1;}
销毁二叉树
//销毁二叉树void DestroyBinTree(PBTNode* pRoot){    assert(pRoot);    if (*pRoot)    {        DestroyBinTree(&(*pRoot)->_left);        DestroyBinTree(&(*pRoot)->_right);        free(*pRoot);        *pRoot = NULL;    }}
求叶子节点的个数
//求叶子节点的个数 int GetLeafCount(PBTNode pRoot){    if (pRoot == NULL)        return 0;    if (pRoot->_left == NULL && pRoot->_right == NULL)        return 1;    return  GetLeafCount(pRoot->_left) + GetLeafCount(pRoot->_right);}
求树的高度
//求树的高度int HeightBinTree(PBTNode pRoot){    int Left_Height = 0;    int Right_Height = 0;    if (pRoot == NULL)        return 0;     Left_Height = HeightBinTree(pRoot->_left);    Right_Height = HeightBinTree(pRoot->_right);    return Left_Height > Right_Height ? Left_Height + 1 : Right_Height + 1;}
二叉树的镜像
//二叉树的镜像(递归版本)void Mirror(PBTNode pRoot){    if (pRoot)    {        PBTNode p = pRoot->_left;        pRoot->_left = pRoot->_right;        pRoot->_right = p;        Mirror(pRoot->_left);        Mirror(pRoot->_right);    }}
求二叉树中第K层节点的个数
//求二叉树中第K层节点的个数int GetKLevel(PBTNode pRoot, int K){    if (pRoot == NULL || K <= 0)    {        return;    }    if (K == 1)        return 1;    return GetKLevel(pRoot->_left,K-1) + GetKLevel(pRoot->_right,K-1);}
二叉树的遍历 (非递归版本)

转载地址:http://ltuoi.baihongyu.com/

你可能感兴趣的文章
gitflow 分支原理
查看>>
使用 PHP 5.4 或者更高版本计算 tiger 哈希值
查看>>
4字节 整数哈希 ----------jenkins 32位Hash算法
查看>>
哈希函数的逆向算法
查看>>
1-3 beanstalkd参数
查看>>
1-4 beanstalkd生产类
查看>>
1-5 beanstalkd消费类
查看>>
1-6 综合案例-生产者消费者
查看>>
织梦cms模板保护技术
查看>>
laravel 课程学习系列一----------------第一章.composer快速入门
查看>>
laravel 课程学习系列二----------------第二章.PHP框架安装之Laravel
查看>>
laravel 课程学习系列三----------------第三章.Artisan控制台
查看>>
git版本控制管理系列-----第四章 GIT基本概念
查看>>
mysql 库级权限、表级权限授权
查看>>
TensorFlow中的单层神经网络
查看>>
在TensorFlow中编程
查看>>
用c实现一个压力测试工具
查看>>
圆周率计算公式
查看>>
排序算法之-选择排序
查看>>
排序算法之-基数排序
查看>>