#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
//头文件
#define VALUE int
//定义数据类型
//-----------------------------------------------
typedef struct BITREE{
 VALUE value;
 int unicode;
 struct BITREE *leftson;
 struct BITREE *rightson;
}BITREE;
//二叉树的定义
//定义根
BITREE root;
//定义树的高度
long high=0;
//定义叶子数
long leaves=0;
//树的队列模型
VALUE treeline[100000];
//二叉树操作
//----------------------------------------------
//创建左子树,返回左子树地址
BITREE* createleftson(BITREE *father,VALUE value){
 BITREE *leftson;
 leftson=(BITREE *)malloc(sizeof(BITREE));
 leftson->value=value;
 father->leftson=leftson;
 leftson->leftson=NULL;
 leftson->rightson=NULL;
 leftson->unicode=father->unicode*2;
 treeline[leftson->unicode]=leftson->value;
 return leftson;
}
//创建右子树,返回右子树地址
BITREE* createrightson(BITREE *father,VALUE value){
 BITREE *rightson;
 rightson=(BITREE *)malloc(sizeof(BITREE));
 rightson->value=value;
 father->rightson=rightson;
 rightson->leftson=NULL;
 rightson->rightson=NULL;
 rightson->unicode=father->unicode*2+1;
 treeline[rightson->unicode]=rightson->value;
 return rightson;
}
//遍历二叉树(为了插节点)
int traversal_node(BITREE *root){
 if(root==NULL)
  return 1;
 if(root->unicode%2==0){
  root->unicode*=2;
  treeline[root->unicode]=root->value;
 }
 else
 {
  root->unicode*=2;
  root->unicode--;
  treeline[root->unicode]=root->value;
 }
 traversal_node(root->leftson);
 traversal_node(root->rightson);
}
//插入左节点,返回左结点地址
BITREE* createleftnode(BITREE *father,VALUE value){
 BITREE *newnode;
 newnode=(BITREE *)malloc(sizeof(BITREE));
 newnode->leftson=father->leftson;
 newnode->rightson=NULL;
 father->leftson=newnode;
 newnode->value=value;
 newnode->unicode=father->unicode*2;
 treeline[newnode->unicode]=newnode->value;
 traversal_node(newnode->leftson);
 return newnode;
}
//插入右结点,返回右结点地址
BITREE* createrightnode(BITREE *father,VALUE value){
 BITREE *newnode;
 newnode=(BITREE *)malloc(sizeof(BITREE));
 newnode->rightson=father->rightson;
 newnode->leftson=NULL;
 father->rightson=newnode;
 newnode->value=value;
 newnode->unicode=father->unicode*2+1;
 treeline[newnode->unicode]=newnode->value;
 traversal_node(newnode->rightson);
 return newnode;
}
//遍历二叉树(先序)
int traversal_first(BITREE *root){
 if(root==NULL)
  return 1;
 //to do
 traversal_first(root->leftson);
 traversal_first(root->rightson);
}
//遍历二叉树(中序)
int traversal_middle(BITREE *root){
 if(root==NULL)
  return 1;
 traversal_middle(root->leftson);
 //to do
 traversal_middle(root->rightson);
}
//遍历二叉树(后序)
int traversal_last(BITREE *root){
 if(root==NULL)
  return 1;
 traversal_last(root->leftson);
 traversal_last(root->rightson);
 //to do
}
//树的高度
int highoftree(BITREE *root){
 int l,r;
 if(root){
  l=highoftree(root->leftson);
  r=highoftree(root->rightson);
  if(l>r)
   return l+1;
  else
   return r+1;
 }
 else
  return 0;
}
/*
 if(root->leftson==NULL&&root->rightson==NULL)
  return 1;
 if(root->leftson==NULL)
  return highoftree(root->rightson)+1;
 if(root->rightson==NULL)
  return highoftree(root->leftson)+1;
 else
  return highoftree(root->leftson)>highoftree(root->rightson)?highoftree(root->leftson):highoftree(root->rightson)+1;
*/
//已知unicode探求树的拓扑路径
int* findpath(int unicode){ 
 int *path;
 path=(int *)malloc(sizeof(int)*1000);
 int k,point=0;
 k=unicode;
 while(k!=1){
  if(k%2==0){
   *(path+point)=2;
   k/=2;
   point++;
  }
  else{
   *(path+point)=1;
   k=(k-1)/2;
   point++;
  }
 }
 *(path+point)=0;
 return path;
}
//注:1代表取左上,2代表取右上

二叉树的实现与一些基本操作(C++环境)的更多相关文章

  1. 【mybatis】1、入门CURD基本操作(环境搭建)

    #1.基本环境 环境 版本 jdk 1.7.0_10 ide eclipse-jee-luna-SR2-win32-x86_64 maven 3.3.3 mybatis 3.2.7 mysql 5.1 ...

  2. MySql(一)mysql服务的基本操作及环境配置

    MySQL服务的启动开始–>计算机–>右键选择管理–>双击打开服务和应用程序–>双击服务–>找到MySQL的服务名称(我的是MySQL56),右键选择启动即可 通过命令行 ...

  3. Docker环境搭建以及基本操作

    Docker环境搭建以及基本操作 Docker环境基本搭建: 基础环境:Centos 7.4        IP:192.168.30.117 [root@docker ~]# cat /etc/re ...

  4. [LeetCode] Invert Binary Tree 翻转二叉树

    Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 Trivia: This problem wa ...

  5. 基于Java实现红黑树的基本操作

    首先,在阅读文章之前,我希望读者对二叉树有一定的了解,因为红黑树的本质就是一颗二叉树.所以本篇博客中不在将二叉树的增删查的基本操作了,需要了解的同学可以到我之前写的一篇关于二叉树基本操作的博客:htt ...

  6. JAVA实现二叉树(简易版--实现了二叉树的各种遍历)

    1,个人感觉二叉树的实现主要还是如何构造一颗二叉树.构造二叉树函数的设计方法多种多样,本例采用 addNode 方法实现.以下程序通过定义内部类来表示二叉树的结点,然后再实现了二叉树这种数据结构的一些 ...

  7. java数据结构之二叉树的定义和递归实现

    定义最多有两棵子树的有序树,称为二叉树.二叉树是一种特殊的树.递归定义:二叉树是n(n>=0)个有限结点构成的集合.N=0称为空二叉树:n>0的二叉树由一个根结点和两互不相交的,分别称为左 ...

  8. Conda 配置 Python 环境

    目录 前言 一.Conda 是什么 二.如何获取 三.使用 Conda 命令配置多环境 1.创建新环境 2.激活新环境 3.配置新环境 4.退出新环境 5.检查所有环境 6.检查所有安装的包 7.删除 ...

  9. Java提高篇(二七)-----TreeMap

    TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...

随机推荐

  1. Unity3D 中的定时器

    不算上 C# 自带的,目前知道两种,以下分别介绍. 1.每帧检查 定义一个时间变量 timer,每帧将此时间减去帧间隔时间 Time.deltaTime,如果小于或者等于零,说明定时器到了,执行相应功 ...

  2. 51nod1265 四点共面

    题目链接:51nod 1265 四点共面 四个点构成的三个向量a,b,c共面的充要条件是存在不全为零的实数x,y,z满足x*a+y*b+z*c=0,然后想到线代了.. 其实就是三个向量的混合积为0:( ...

  3. Oracle通过一个Value值查询数据库

    ---恢复内容开始--- 大家在想看看数据库中有哪些数据表中,哪些字段中有“helloworld” 这个字符串,现在数据库所有的表,视图都不能直接提供,所有必须通过循环去访问所有的数据表,所有的字段列 ...

  4. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(八)

    前言 本篇幅将对系统的菜单管理模块进行说明,系统的菜单采用树形结构,这样可以更好地方便层级设计和查看.本示例将说明如何通过EntityFramework读取递归的菜单树形结构,以及结合EasyUI的t ...

  5. 利用jQueryRotate旋转插件开发大转盘抽奖

    前言: 公司原来开发大转盘抽奖活动用的是flash 我发现swf文件竟然有6m大,吓尿了! 其实完全可以用js写的,但是自身前端功力有限,且时间紧迫,所以直接用旋转插件就好,兼容各方面都可以保证. 1 ...

  6. SCSS

    CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 CSS 增加了一些编程的特性,将 CSS 作为目标生成文件,然后开发者就只要使用这种语言进行编码工作. 通俗的说,“CSS ...

  7. μC/OS-Ⅲ系统中的任务就续表

    μC/OS-Ⅲ支持任意数目的不同优先级.一般情况下64级优先级就足够了. 在μC/OS-Ⅲ中所有已经就绪等待运 行的任务都被放入一个我为的“就续表”(ready list)中.就续表包括两部分:一个就 ...

  8. 中国B2B行业将进入后平台时代

    中国的B2B正在进入后平台时代,我们用三个特征来诠释这个词:1.电商平台构建流程闭环服务,从电商平台向综合服务商转变:2.新流量批发策略的落地代表B2B找到了新入口:3.第三方服务的价值变现与第二波创 ...

  9. js 简繁体字转换

    有些项目需要用到简体和繁体两种字体,在js前台进行转换比较方便而且显示速度没有延时 是一个比较好的解决方案. var _isFT_CS = 0// 简体 var _isFT_CT = 1// 繁体 v ...

  10. 最近用到js筛选一个url的域名部分(草创)

    var TLD = ['com','net','org','gov','edu','mil','biz','name','info','mobi','cn','hk']; var host = ''; ...