ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

基于二叉树的算法

2022-02-04 19:31:07  阅读:163  来源: 互联网

标签:lchild 基于 return BiTree bt 算法 二叉树 rchild null


1.统计二叉树中度为1的节点个数

int NodeCount(BiTree bt){
    if(bt == null) return 0;
    if(bt->lchild == null && bt->rchild != null || bt->lchild != null && bt->rchild == null)
        return 1+NodeCount(bt->lchild) + NodeCount(bt->rchild);
    return NodeCount(bt->lchild) + NodeCount(bt->rchild);
}

2.统计二叉树中度为2的节点个数

int NodeCount(BiTree bt){
    if(bt == null) return 0;
    if(bt->lchild != null && bt->rchild != null)
        return 1+NodeCount(bt->lchild) + NodeCount(bt->rchild);
}

 3.统计二叉树中度为0的节点个数(叶节点)

int NodeCount(BiTree bt){
    if(bt == null) return 0;
    if(bt->lchild == null && bt->rchild == null)
        return 1;
    else
        return NodeCount(bt->lchild) + NodeCount(bt->rchild);
}

 4.计算二叉树高度

int height(BiTree bt){
    if(bt == null) return 0;
    int LHeight = height(bt->left);
    int RHeight = height(bt->right);
    return (LHeight > RHeight ? LHeight : RHeight) + 1;
}

5.计算二叉树最大高度(基于先序遍历)

int count[MaxSize];
int max = -1;
void width(BiTree bt, int k){
    if(bt == null) return;
    count[k]++;    //该层节点数+1
    if(max<count[k]) max = count[k];
    width(bt->lchikd, k+1);
    width(bt->rchild, k+1);
}

6.删除二叉树中所有叶节点

void Del_0(BiTree bt){
    BiTree *p = bt;
    if((p->lchild == null && p->rchild == null) || p == null)
        free(p);
        return;
    if(p->lchild->lchild == null && p->lchild->rchild == null)
        free(p->lchild);    //说明是叶节点,删掉
        p->lchild = null;
    else(p->rchild->lchild == null && p->rchild->rchild == null)
        free(p->rchild);
        p-rchild = null;
    Del_0(p->lchild);
    Del_0(p->rchild);
}

7.计算二叉树指定节点所在层次

int level(BiTree bt, BiTree *p){
    int d1,d2;
    if(bt == null) return 0;
    if(bt == p) return 1;
    d1 = level(bt->lchild, p);
    d2 = level(bt->rchild, p);
    if(d1 || d2) return 1+(d1>d2 ? d1:d2);
    retrun 0;
}

8.交换二叉树左右子树

void swap(BiTree bt){
    if(bt){
        swap(bt->lchild);
        swap(bt->rchild);
        BiTree *temp = bt->lchild;
        bt->lchild = bt->rchild;
        bt->rchild = temp;
    }
}

9.后序遍历非递归算法

void PostOrder(BiTree T){
    InitStack(S);
    BiTree *p = T;
    BiTree *r = null;
    while(p || !IsEmpty(S)){
        if(p){
            Push(S,p);
            p = p->lchild;
        }else{
            GetTop(S,p);
            if(p->rchild && p->rchild != r){    //判断是否有右子树
                p = p->rchild;
            }else{
                Pop(S,p);
                visit(p->data);
                r = p;
                p = null;
            }
        }
    }
}

 

标签:lchild,基于,return,BiTree,bt,算法,二叉树,rchild,null
来源: https://www.cnblogs.com/jake-jin/p/15863317.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有