二叉树的相关算法(一)

1.求二叉树所有的节点数

2.求二叉树所有的叶子节点数

3.求二叉树最小值的节点值

4.求二叉树所有节点值之和

5.求二叉树节点值为x的个数

6.删除二叉树

//求二叉树所有的节点数
int nodes(BTNode *r){
    if(r==0)
        return 0;
    else
        return nodes(r->lchild)+nodes(r->rchild)+1;
} 

//求二叉树所有的叶子节点数
int leafNodes(BTNode *r){
    if(r==NULL)
        return 0;
    else if(r->lchild==NULL&&r->rchild==NULL)
        return 1;
    else
        return leafNodes(r->lchild)+leafNodes(r->rchild);
} 

//求二叉树最小值的节点值
void minNode(BTNode *r,elemType &min){
    if(r!=NULL){
        if(r->data<min)
            min=r->data;
        minNode(r->lchild,min);
        minNode(r->rchild,min);
    }

} 

//求所有节点值之和
int findSum(BTNode *r){
    if(r==NULL)
        return 0;
    else
        return r->data+findSum(r->lchild)+findSum(r->rchild);
} 

//求二叉树中节点值为x的节点个数
int findCount(BTNode *r,int x){
    if(r==NULL)
        return 0;
    if(x==r->data)
        return 1+findCount(r->lchild,x)+findCount(r->rchild,x);
    else
        return findCount(r->lchild,x)+findCount(r->rchild,x);    

} 

//删除二叉树
void delTree(BTNode *r){
    if(r!=NULL){
        delTree(r->lchild);
        delTree(r->rchild);
        free(r);
    }
} 

原文地址:https://www.cnblogs.com/hekuiFlye/p/9574361.html

时间: 2024-10-22 12:34:06

二叉树的相关算法(一)的相关文章

JavaScript实现排序二叉树的相关算法

1.创建排序二叉树的构造函数 /** * 创建排序二叉树的构造函数 * @param valArr 排序二叉树中节点的值 * @constructor */ function BinaryTree(valArr) { function Node(val) { this.value = val; this.left = null; this.right = null; } var root = null; valArr.forEach(function (val) { var newNode =

二叉树的相关操作

#include<stdio.h> #include<malloc.h> #define MAXSIZE 20 typedef char TEelemtype; typedef struct BiTNode{ TEelemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //队列的方式 typedef struct queueelem { BiTNode* b[MAXSIZE]; int front,rear;

二叉树各种相关操作(建立二叉树、前序、中序、后序、求二叉树的深度、查找二叉树节点,层次遍历二叉树等)(C语言版)

将二叉树相关的操作集中在一个实例里,有助于理解有关二叉树的相关操作: 1.定义树的结构体: 1 typedef struct TreeNode{ 2 int data; 3 struct TreeNode *left; 4 struct TreeNode *right; 5 }TreeNode; 2.创建根节点: 1 TreeNode *creatRoot(){ 2 TreeNode * root =(TreeNode *)malloc(sizeof(TreeNode)); 3 if(NULL=

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(转)

第 2 部分: 深入推荐引擎相关算法 - 协同过滤 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法. 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”.本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现.Apache Mahout 是 ASF 的一个

数据结构(C语言版)顺序栈相关算法的代码实现

这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的是从栈底想栈顶方向运行visit()函数,这是之前的学习中所忽略的:栈的遍历解除了栈的输出顺序只能从栈顶像栈底方向的限制. 二.清空栈时要不要将stacksize重置 网上看到有的人在实现清空栈这一功能时,将stacksize重置为0,我觉得有点问题,起初的想法是将其重置为初始化时的值,在与同学讨论

比较器(Comparable、Comparator)类及 二叉树的排序算法

之前Arrays 类中存在sort() 方法, 此方法可以直接对 对象数组进行排序. 1.Comparable接口 可以直接使用java.util.Arrays 类进行数组的排序操作,但对象所在的类必须实现Comparable 接口,用于指定排序接口. Comparable 接口定义如下: public interface Comparable<T>{ public int compareTo(T o); } 此方法返回一个int 类型的数据,但是此int 的值只能是以下三种: 1:表示大于

加密类型及其相关算法

在互联网通信过程中,如何保证数据的安全性? 在通信过程中,数据安全主要从三个方面考虑:机密性(数据的内容不能被窃取) 完整性(数据的内容不能被修改) 身份验证(确定通信双方的身份) 加密类型:1.对称加密,加密和解密使用同一个密钥,但是密钥如何安全传输比较重要,对称加密数度较快,适于加密数据 2.单向加密,提取数据指纹,主要用于保证数据的完整性 单向加密的特点:输入相同则输出一定相同 雪崩效应:输入的微小改变会引起结果的巨大反差 定长输出 3.非对称加密,使用一对密钥(public-key和pr

探索推荐引擎内部的秘密,第 3 部分: 深入推荐引擎相关算法 - 聚类

聚类分析 什么是聚类分析? 聚类 (Clustering) 就是将数据对象分组成为多个类或者簇 (Cluster),它的目标是:在同一个簇中的对象之间具有较高的相似度,而不同簇中的对象差别较大.所以,在很多应用中,一个簇中的数据对象可以被作为一个整体来对待,从而减少计算量或者提高计算质量. 其实聚类是一个人们日常生活的常见行为,即所谓"物以类聚,人以群分",核心的思想也就是聚类.人们总是不断地改进下意识中的聚类模式来学习如何区分各个事物和人.同时,聚类分析已经广泛的应用在许多应用中,包

linux学习之路之加密类型及其相关算法

加密类型及其相关算法 随着互联网越演越烈,互联网上的各种攻击层出不穷,因此在互联网上相互传递的信息越来越不安全,因此为了防止用户在互联网上传递的数据被窃取,因此我们很有必须加强传递的数据的安全性. 数据的安全性主要包括以下三个方面: 数据的机密性:保证传递的数据不被读取 要想使传递的数据不被读取,可以对这些数据进行加密,因为默认这些数据是以明文来传递的 整个加密过程可以这么来理解: 加密:plaintext--->转换规则--->ciphertext 解密:ciphertext--->转