//Implement a function to check if a tree is balanced. For the purposes of this question, a balanced tree is defined to be a tree such that no two leaf nodes differ in distance from the root by more than one.
//
// 译文:
//
// 实现一个函数检查一棵树是否平衡。对于这个问题而言, 平衡指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。 #include <iostream>
#include <string>
using namespace std; class tree
{
public: tree()
{
//root = create();
root = NULL;
index = 0;
} /***输入扩展层次遍历序列,#表示该节点为空***/
tree(char *s)
{
root = NULL;
index = 0;
if (s == NULL)
{
return;
} int size = strlen(s);
create(&root,s,0,size);
} ~tree()
{
/***清空二叉树***/
} /***二叉排序树:插入。***/
void insert(char *s)
{
if (s == NULL)
{
return;
} int size = strlen(s);
for (int i = 0; i<size; i++)
{
insert(&root, s[i]);
}
} bool isBanlance(int size)
{
int *s = new int[size];
depth(root,s,size,0);
s[index+1] = '\0';
int i = 0;
int max = s[0];
int min = s[0];
while(s[i]!='\0')
{
if (s[i]>max)
{
max = s[i];
}
if (s[i]<min)
{
min = s[i];
}
i++;
}
return ((max - min)>1? 0:1);
} void preOrder(){ pOrder(root);}
void inOreder(){ zOrder(root);}
void postOreder(){ hOrder(root);} private:
struct treenode
{
char data;
treenode * left;
treenode * right;
}; treenode *root;
int index; void insert(treenode **p, char s)
{
if (((*p) == NULL) && s != '\0')
{
*p = new treenode;
(*p)->data = s;
(*p)->left = NULL;
(*p)->right = NULL;
}
else
{
if ((*p)->data > s)
{
insert(&((*p)->left) , s);
}
else
{
insert(&((*p)->right) , s);
}
}
} void depth(treenode *s, int *str,int size,int k)
{
if (s==NULL)
{
return;
}
if (s->left == NULL && s->right == NULL)
{
str[index]= k;
index++;
}
else
{
depth(s->left,str, size, k+1);
depth(s->right,str, size, k+1);
}
} treenode* create()
{
treenode *p;
char t;
cout<<"请输入:"<<endl;
t = getchar();
if (t=='#')
{
p = NULL;
}
else
{
p = new treenode;
p->data = t;
cout<<"create tree node: "<<t<<endl;
p->left = create();
p->right = create(); }
return p;
} void create(treenode **p, char *str, int i, int size)
{ if (i>size-1 || str[i] == '\0')
{
*p = NULL;
return;
} if (str[i] == '#')
{
*p=NULL;
}
else
{
*p = new treenode;
(*p)->data = str[i];
create(&((*p)->left),str,2*i+1,size);
create(&((*p)->right),str,2*i+2,size);
}
} void pOrder(treenode *p)
{
if (p==NULL)
{
return;
} cout<<p->data<<" "<<endl;
pOrder(p->left);
pOrder(p->right);
} void zOrder(treenode *p)
{
if (p==NULL)
{
return;
}
zOrder(p->left);
cout<<p->data<<" "<<endl;
zOrder(p->right);
} void hOrder(treenode *p)
{
if (p==NULL)
{
return;
}
hOrder(p->left);
cout<<p->data<<" "<<endl;
hOrder(p->right);
}
}; int main()
{
/***扩展层次序列简立树***/
//char t[9] = "ABCDE#FG";
//tree s(t);
//s.preOrder(); /***建立二叉排序树***/
tree s;
char t[8] = "3289654";
s.insert(t);
// s.postOreder(); cout<<"is Banlance? "<<s.isBanlance(8)<<endl;
cout<<"Over"<<endl; return 0;
}

最新文章

  1. JavaScript函数定义和调用 变量作用域
  2. 教你一步一步实现一个Promise
  3. poj1631Bridging signals(最长单调递增子序列 nlgn)
  4. HP StorageWorks MSL2024 Tape Libraries - Tape library Error Codes
  5. 洛谷P2733 家的范围 Home on the Range
  6. (二 )VMware workstation 部署虚拟集群实践——并行批量操作环境部署
  7. ASP.NET MVC 第三回 Controller与View
  8. 【技术文档】《算法设计与分析导论》R.C.T.Lee等&#183;第5章 树搜索策略
  9. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
  10. hive 压缩全解读(hive表存储格式以及外部表直接加载压缩格式数据);HADOOP存储数据压缩方案对比(LZO,gz,ORC)
  11. SpreadJS使用进阶指南 - 使用 NPM 管理你的项目
  12. BIOS备忘录之IIC(touchpad)设备
  13. Tomcat定义虚拟主机案例
  14. .net core 支持apk下载
  15. HDU 1879 继续畅通工程(最小生成树)
  16. InfluxDB(官方使用说明)
  17. TRIZ系列-创新原理-13-反过来做原理
  18. centos infiniband网卡安装配置
  19. 中文路径读取乱码,json乱码
  20. LDA主题模型浅析

热门文章

  1. ip网关配置
  2. 目前用到的一些os.path方法
  3. docker安装成功启动失败
  4. 用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu16.04图文教程
  5. 20180518VSTO多簿单表汇总外接程序按钮
  6. anaconda安装tensorflow
  7. DHCP机制
  8. Matlab-11:Gausssidel迭代法工具箱
  9. 【Oracle】【3】字段自增长(+1)
  10. const constptr 和引用的盲点(未解决)