博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
阅读量:5918 次
发布时间:2019-06-19

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

1.判断二叉树是否平衡

//求树的高度int TreeDepth(Node* t){    int hl,hr,h;    if(t != NULL)    {        hl = TreeDepth(t->left);        hr = TreeDepth(t->right);        h = hl>hr? hl:hr;        return h+1;    }    return 0;}//判断二叉树是否平衡int isBalanced(Node* t)  {     if(t==NULL) return 1;     int leftDepth = TreeDepth(t->left);     int rightDepth = TreeDepth(t->right);     if(abs(leftDepth-rightDepth) > 1)         return 0;     else         return isBalanced(t->left) && isBalanced(t->right); }

2.判断二叉树是否相同

//判断两棵二叉树是否相同int CompTree(Node* tree1, Node* tree2){    if(tree1 == NULL && tree2 == NULL)        return 1;    else if(tree1 == NULL || tree2 == NULL)        return 0;    if(tree1->data != tree2->data)        return 0;    if(CompTree(tree1->left,tree2->left)==1 && CompTree(tree1->right,tree2->right)==1)        return 1;    //反转二叉树也可能相同    if(CompTree(tree1->left,tree2->right)==1 && CompTree(tree1->right,tree2->left)==1)        return 1;    return 0;}
//拷贝二叉树   void CopyTree(Node* s,Node* & d)  {      if(s==NULL) d = NULL;      Node* temp = new Node;      temp->data = s->data;      if(d==NULL) d = temp;      if(s->left) CopyTree(s->left,d->left);      if(s->right) CopyTree(s->right,d->right);  }

3.判断二叉树是否完全二叉树

判断二叉树是否是完全二叉树:层次遍历二叉树,遍历的左右节点入队列。若出队列的结点为空,则以后出队列的结点都为空,则为完全二叉树,否则不是

int ComplateTree(Node* bt){    Node* p=bt;    queue
q; int tag=0; if(p==NULL) return 1; q.push(p); while(!q.empty()) { p=q.front(); q.pop(); if(p->left && !tag) q.push(p->left); else if(p->left) return 0; else tag=1; if(p->right && !tag) q.push(p->right); else if(p->right) return 0; else tag=1; } return 1;}

4.判断二叉树是否二叉排序树

判断二叉树是否是二叉排序树(BST):根据中序遍历序列是否升序来判断

bool IsBinarySortTree(Node* bt){    stack
s; Node* p = bt; Node* pre = NULL; // pre保持为p的中序前驱 while(p || !s.empty()) { if(p) { s.push(p); p = p->left; } else { p = s.top(); s.pop(); if( pre && (p->data <= pre->data) ) return false; // 不是二叉排序树 pre = p; // 记下前驱结点 p = p->right; } } return true; // 二叉排序树}

判断二叉树是否是二叉排序树(BST):层次遍历二叉树,若出队列的结点小于左结点的值,或者是大于右结点的值,则不是BST,否则是BST

bool IsBST(Node* T){    queue
q; Node* p; if(T == NULL) return true; q.push(T); while(!q.empty()) { p = q.front(); q.pop(); if(p->left) if(p->data < p->left->data) return false; else q.push(p->left); if(p->right) if(p->data > p->right->data) return false; else q.push(p->right); } return true;}

 

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

你可能感兴趣的文章
[ 第三章] JavaScript DOM(4)节点
查看>>
ArUco----一个微型现实增强库的介绍及视觉应用(二)
查看>>
css-折叠标签
查看>>
乎,前所未有的挑战!
查看>>
复杂链表的复制
查看>>
子数组的最大和问题
查看>>
PeopleSoft Financials Tables
查看>>
C++产生随机数
查看>>
异常,做好最坏情况的准备
查看>>
Android学习第2步--Activity组件
查看>>
iOS: (库) 图片异步下载/缓存-SDWebImage的使用
查看>>
spring path格式
查看>>
MVC生成页码选择器返回HTML代码
查看>>
MySql开启远程账户登陆总结
查看>>
poj 1704 Georgia ans Bob (Staircase-Nim)
查看>>
node.js 简单的获取命令参数
查看>>
Xcode8注释快捷键以及相关插件使用无效解决方法
查看>>
mac 下 配置appium +ios真机环境
查看>>
针对各主流数据mysql、sqlserver、oracle中文乱码问题。
查看>>
解决安卓开发文档docs打开过慢的问题
查看>>