#include "stdafx.h"
#include <fstream>
#include <iostream>
using namespace std;typedef struct _Node
{int data;struct _Node *left;struct _Node *right;int bf;              //平衡因子
    _Node(){data = 0;left = NULL;right = NULL;bf = 0;}
}Node, *_PNode;//创建二叉树利用先序创建
/*1/     \2       3/ \      / 4   5    6/ \   \  / \7   8  9  10 11/     \12      13
*/
void CreateBitree(_PNode &pNode, fstream &fin)
{int dat;fin>>dat;if(dat==0){pNode = NULL;}else {pNode = new Node();pNode->data=dat;      CreateBitree(pNode->left, fin);      CreateBitree(pNode->right, fin);}
}//**************************************求各结点的平衡因子**************************************begin//递归求二叉树的深度
int Depth(_PNode pNode)
{if (NULL != pNode){int hl = Depth(pNode->left);int hr = Depth(pNode->right);return hl > hr ? hl + 1: hr + 1;}return 0;
}//递归求二叉树每个结点的平衡因子
void Balance(_PNode pNode)
{if (NULL != pNode){Balance(pNode->left);Balance(pNode->right);int hl = Depth(pNode->left);int hr = Depth(pNode->right);pNode->bf = hl - hr;}
}//前序递归遍历
void PreTravelTree(_PNode pRoot)
{if(pRoot){cout<<pRoot->data<<"("<<pRoot->bf<<")"<<" ";PreTravelTree(pRoot->left);    PreTravelTree(pRoot->right);}
}//中序递归遍历
void MidTravelTree(_PNode pRoot)
{if(pRoot){MidTravelTree(pRoot->left);  cout<<pRoot->data<<"("<<pRoot->bf<<")"<<" ";MidTravelTree(pRoot->right);}
}//**************************************求各结点的平衡因子**************************************endint _tmain(int argc, _TCHAR* argv[])
{_PNode pRoot = NULL;fstream fin("tree.txt");CreateBitree(pRoot, fin);Balance(pRoot);cout<<"前序:";PreTravelTree(pRoot);cout<<endl<<"后序:";MidTravelTree(pRoot);cout<<endl;return 0;
}

运行界面如下:

建造二叉树用到的tree.txt文件如下:

1 2 4 7 12 0 0 0 8 0 13 0 0 5 0 9 0 0 3 6 10 0 0 11 0 0 0

二叉树平衡因子应用举例相关推荐

  1. DS查找—二叉树平衡因子

    题目描述 二叉树用数组存储,将二叉树的结点数据依次自上而下,自左至右存储到数组中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点在数组中用0来表示. 计算二叉树每个结点的平衡因子,并按后序遍历的顺 ...

  2. ds查找—二叉树平衡因子_面试官让我手写一个平衡二叉树,我当时就笑了

    平衡二叉树对于初学者一直是一个比较复杂的知识点,因为其里面涉及到了大量的旋转操作.把大量的同学都给转晕了.这篇文章最主要的特点就是通过动画的形式演示.确保大家都能看懂.最后是手写一个平衡二叉树. 一. ...

  3. c语言求平衡因子,平衡二叉树(AVL树)的基本操作

    0x00.平衡二叉树的定义 平衡二叉树(AVL树)是一种特殊的二叉搜索树,只是在二叉搜索树上增加了对"平衡"的需求. 假如一棵二叉搜索树,按照"1,2,3,4,5&quo ...

  4. 平衡二叉树平衡因子怎么计算_数据结构PHP 平衡二叉树(AVL)的平衡原理

    这篇文章主要介绍一下 平衡二叉树(AVL),对于 二分搜索树 来说,如果树上的 元素 是顺序 添加的,会导致数据退化成一个 链表,这样就会造成很严重的性能问题,此时就需要在 二分搜索树 的基础上,保证 ...

  5. 数据算法之二叉树平衡(BinTreeNode Rotate)的Java实现

    本文的代码来自于<数据结构与算法(JAVA语言版)>,是笔者在网上找到的资料,非正式出刊版物.笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论. 二叉树平衡的基本思想是通过 ...

  6. 平衡二叉树平衡因子怎么计算_平衡二叉树(AVL Tree)旋转机制分析

    平衡二叉树(AVL Tree) 概述 AVL树是以二分搜索树(BST)为底层数据结构而实现的,其特性是需要维护AVL的|平衡因子| <= 1 平衡因子 对于一个父节点的左右子树高度差的绝对值需要 ...

  7. 平衡二叉树平衡因子_数据结构:平衡二叉树

    1.基本概念    平衡二叉树(AVL树),或为空树,或为如下性质的二叉排序树:左右子树深度之差的绝对值不超过1;左右子树仍然为平衡二叉树. 平衡因子BF=左子树深度-右子树深度. 平衡二叉树每个结点 ...

  8. 二叉树平衡(DSW算法)

    一.前言 <二叉查找树全面详细介绍>中讲解了二叉树操作:搜索(查找).遍历.插入.删除.<二叉树遍历详解(递归遍历.非递归栈遍历,Morris遍历)>详细讲解了二叉树遍历的几种 ...

  9. 不用平衡因子及父节点来实现平衡二叉树

    // 不是 很会用图片来进行描述我的插入想法 在这里只能简单口述一下 // 最核心的想法就是 始终以最上面的三个节点来调整二叉树 让其达到平衡 //情况分为四种 //第一种 当头节点的左节点的左节点造 ...

最新文章

  1. mysql/mariadb命令如何获取帮助
  2. 前端学习(1818):前端面试题之封装函数之进行字符串驼峰的命名
  3. windows service 2008 内存吃尽解决方案
  4. AcWing之重建二叉树
  5. mxnet安装(Jetson)
  6. 斜齿轮受力计算:理论计算virtual.lab motion 仿真
  7. 一张图看尽 Linux 内核运行原理
  8. Linux IPC(Inter-Process Communication,进程间通信)之管道学习
  9. 新计算机 安装win2000,诚请指教如何在较新配置电脑中安装win2000及其VHD系统
  10. 爱站网关键词挖掘查询工具-批量网站关键词挖掘导出软件免费下载
  11. OpenGL+VS2015相关类库配置
  12. 从zookeeper官方文档系统学习zookeeper
  13. 红孩儿编辑器的详细设计第二部分
  14. 概率统计_假设检验——单边检验的接受域和拒绝域
  15. python实现视频人脸替换_python换人脸视频教程(怎样制作人脸从小到老的变化视频?)...
  16. docker之制作镜像
  17. 字典制作工具-创建自己的密码字典文件
  18. ESD保护芯片BAT54S/BAV99和电平转换芯片SN74AVC1T45
  19. Python中,一次性往Excel写入几十万条数据
  20. wps 字体对系统无效_“字体”侵权,你是否也中招?

热门文章

  1. vue项目部署iis后 乱码_vue项目的自动化部署
  2. 计算机课教案学法,计算机应用基础教学方法初探
  3. cmd 将文件夹下文件剪切到另外一个文件_手把手教你运行第一个 Java 程序,看不懂你来骂我!...
  4. 得到多组单选框的值_多组学如何构建预后预测模型,还发了7分+?
  5. matlab避免使用for_MATLAB新手学习技巧第二波来袭
  6. 理解crossentropy loss
  7. 27留数及其应用(三)
  8. 基于图像处理技术的柑橘病害自动检测与分类
  9. Java将一个正整数进行因数分解
  10. alter table 加多个字段_Vue 组件设计 - table不需要封装