博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树与其它树
阅读量:6412 次
发布时间:2019-06-23

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

树:树是一个非空的有限元素的集合,其中一个元素为根(root),余下的元素(如果有的话)组成t的子树。

层次关系:层次中最高层的元素为根。其下级的元素是余下元素所构成子树的根。

兄弟:有相同父母的孩子为兄弟(sibling) 

叶子:树中没有孩子的元素称为叶子。 
树根是树中唯一一个没有父节点的元素。

二叉树

 

概念:t是一个有限个元素的集合(可以为空)。当二叉树非空时其中有一个称为根的元素,余下的元素(如果有的话)被组成二个二叉树,分别为t的左子树和右子树。

二叉树与树的根本区别:

  • 二叉树可以为空,但树不能为空
  • 二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。而树中每个元素可 有若干子树
  • 在二叉树中每个元素都是有序的,也就是说可以用左、右树来区别。而树的子树间是无序的。

二叉树地特性:

  1. 包含n个元素的二叉树的边数为n-1
  2. 若二叉树的高度为h,h>=0,则二叉树最少有h个元素,最多有2^h-1个元素。
  3. 包含n个元素的二叉树高度最大为n最小为log2(n+1)。 //这一点暂时不太懂。
  4. 设完全二叉树中一元素序号为i 1<=i<=n则有以下成立关系。(1)当i=1时,该元素为二叉树的根若i>1则该元素父节点的编号为i/2 (2)当2i>n时该元素无左孩子,否则其左孩子的编号为2i(3)若2i+1>n时,该元素无右孩子,否则其右孩子编号为2i+1。

二叉树的描述:

链表描述:

// BinaryTree.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include 
#include
using namespace std;template
class BinaryTreeNode{public: BinaryTreeNode(){LeftChild = RightChild = 0;} BinaryTreeNode(const T & e) {LeftChild = RightChild = 0;data = e;} BinaryTreeNode(const T & e,BinaryTreeNode * l ,BinaryTreeNode * r) { data = e; LeftChild = l; RightChild = r; } T data; BinaryTreeNode
* LeftChild; BinaryTreeNode
* RightChild;};template
void Visit(BinaryTreeNode
* t){ cout<
data;}//前序遍历template
void PreOrder(BinaryTreeNode
* t){ if(t) { Visit(t); PreOrder(t->LeftChild); PreOrder(t->RightChild); }}//中序遍历template
void InOrder(BinaryTreeNode
* t){ if(t) { InOrder(t->LeftChild); Visit(t); InOrder(t->RightChild); }}//后序遍历template
void PostOrder(BinaryTreeNode
* t){ if(t) { PostOrder(t->LeftChild); PostOrder(t->RightChild); Visit(t); }}//输出完全括号化的中缀表达式template
void Infix(BinaryTreeNode
* t){ //输出表达示的中缀表达式 if(t) { cout<<"("; Infix(t->LeftChild); //左操作数 cout<
data; //符号 Infix(t->RightChild);//右操作数 cout<<")"; }}void Test(){ BinaryTreeNode
a1("a",0,0); BinaryTreeNode
a2("b",0,0); BinaryTreeNode
a3("*",&a1,&a2); BinaryTreeNode
a4("c",0,0); BinaryTreeNode
a5("d",0,0); BinaryTreeNode
a6("/",&a4,&a5); BinaryTreeNode
a7("+",&a3,&a6); PreOrder
(&a7); cout<
(&a7); cout<
(&a7); cout<
(&a7); cout<

抽象数据类型BinaryTree

待序

出处:
作者:

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

你可能感兴趣的文章
17.07.28 SQL 函数
查看>>
创建型设计模式之单例模式(Singleton)
查看>>
自定义JavaScript字典类jsdictionary.js
查看>>
分类与监督学习
查看>>
2018省赛模拟赛1(2017浙江省赛)
查看>>
python进制转换(二丶八丶十丶十六)
查看>>
linux包之iproute之ss命令
查看>>
ListView与ScrollView冲突的4种解决方案
查看>>
python中的import
查看>>
26. 使用fgetc()/fputc()实现文件的拷贝
查看>>
如何成为一个优秀的系统架构师
查看>>
18个有趣的API供你的前端开发测试之用
查看>>
AD域中客户端时间与服务器时间不同步的解决办法
查看>>
HAProxy+Hive构建高可用数据挖掘集群
查看>>
网站相关技术探究keepalive_timeout:
查看>>
思科路由器PPOE client+NAT解决地址回流问题测试
查看>>
Windows Server 2012新特性:证书申请加密
查看>>
zabbix监控之Centos基于LNMP环境安装
查看>>
Linux文本比较命令:diff
查看>>
使用nginx+Apache负载均衡及动静分离
查看>>