二叉树创建以及遍历方式
来源:互联网 发布:淘宝网折叠床单人价格 编辑:程序博客网 时间:2024/06/05 08:40
二叉树的几个重要性质:
性质1 : 在二叉树的第i层最多有2^i - 1个结点
性质2 : 深度为k的二叉树最多含有2^k - 1个结点
性质3 : 对于任何二叉树,如果叶子结点个数为N0,度数为2的结点个数为N2,则由下列等式:
N0 = N2+1
性质4 : 具有n个结点的完全二叉树的深度为log2(n) + 1
性质5 : 如果有n个结点的完全二叉树按层进行结点编号,有下列结论:
1.如果i = 1,表示根节点,无双亲结点
2.如果i > 1, 则双亲结点的编号为[ i / 2 ]
3.如果2i > n ,则结点i没有左孩子否则左孩子的结点为2i
4.如果2i+1 > n,则结点没有右孩子,否则右孩子结点为2i + 1
二叉树的遍历:
1.先序遍历: 先访问根节点,在访问左子树,最后访问右子树
2.中序遍历: 先访问左子树,在访问根节点,最后访问右子树
3.后序遍历: 先访问左子树,在访问右子树,最后访问根节点
快速记忆:先,中,后是根据访问根节点的次序结点的,并且左子树必须在右子树之前访问
4.层次遍历: 有利用队列辅助操作遍历和线索二叉树等方法
下面是创建二叉树和遍历二叉树的代码演示:
下面是创建二叉树和遍历二叉树的代码演示:
#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <queue>using namespace std;#define ERROR -1#define OVER_FLOW 0#define OK 1#define INPUT_MAX_LEN 100char inputstr[100] = {0};typedef int Status;typedef char ElemType;typedef struct treenode{ElemType data;//结点数据单元 struct treenode * right_child; //二叉树的左孩子指针域 struct treenode * left_child; //二叉树的右孩子指针域 }BiTNode,*BiTree;/*要求输入格式为:AB##CD###的形式,其中#表示该结点处没有孩子结点,输入为二叉树前序遍历的顺序*/void visit(const BiTNode *bn){printf("%c ",bn->data);}char ScanInputStr(){static int index = 0;return inputstr[index++];} Status CreateBiTree(BiTree &bitree){ //根据特定输入格式创建一颗二叉树 char tempChar = ScanInputStr(); if(tempChar != '#'){ bitree = (BiTree)malloc(sizeof(BiTNode)); if(bitree == NULL) return OVER_FLOW; bitree->data = tempChar; CreateBiTree(bitree->right_child); //递归创建左子树 CreateBiTree(bitree->left_child); //递归创建右子树 }else bitree = NULL; return OK; } void PreOrderTraverse(const BiTree bitree){ //先序遍历二叉树,递归思想 if(bitree != NULL){ visit(bitree); PreOrderTraverse(bitree->right_child); PreOrderTraverse(bitree->left_child); } } void InOrderTraverse(const BiTree bitree){ //中序遍历二叉树 if(bitree){ InOrderTraverse(bitree->right_child); visit(bitree); InOrderTraverse(bitree->left_child); } } void PostOrderTraverse(const BiTree bitree){ //后序遍历 if(bitree){ PostOrderTraverse(bitree->right_child); PostOrderTraverse(bitree->left_child); visit(bitree); } } void LevelOrderTraverse(const BiTree bitree){ //层次遍历 if(bitree){ queue<BiTNode*> mqueue; //辅助队列 mqueue.push(bitree);BiTNode * pointer;while(!mqueue.empty()){pointer = mqueue.front();mqueue.pop();visit(pointer);if(pointer->right_child)mqueue.push(pointer->right_child);if(pointer->left_child)mqueue.push(pointer->left_child);} } } int main(){ cout<<"Please input the string of the bitree"<<endl; //cin>>inputstr; strcpy(inputstr,"ABC##DE#G##F###");BiTree mtree = NULL; CreateBiTree(mtree); cout<<"The Result of PreOrderTraverse: "; PreOrderTraverse(mtree); cout<<endl; cout<<"The Result of InOrderTraverse: "; InOrderTraverse(mtree); cout<<endl; cout<<"The Result of PostOrderTraverse: "; PostOrderTraverse(mtree); cout<<endl; cout<<"The Result of LevelOrderTraverse:"; LevelOrderTraverse(mtree); cout<<endl; return 0; }
1 0
- 二叉树创建以及遍历方式
- 二叉树创建以及遍历
- 二叉树的创建以及遍历
- C++ 二叉树的创建以及遍历
- 二叉树的创建以及遍历
- 二叉树动态链式创建以及遍历
- 二叉树的创建以及遍历方法
- 二叉树的存储、创建以及遍历
- java二叉树创建以及遍历
- java二叉树创建以及遍历
- 二叉树的创建以及各种遍历
- 二叉树的创建及遍历方式
- 二叉树创建及基本遍历方式
- 二叉树创建以及遍历(递归和非递归方式)
- 二叉树的创建,递归遍历以及非递归遍历
- 二叉树的创建,以及递归前中后序以及层次遍历
- 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现
- 二叉树遍历方式
- 递归系列之入门题二
- Java基础(五)---局部变量、全局变量、静态变量、final变量、静态常量、静态方法
- Android中Scrollview、ViewPager、ListView冲突问题 (亲测可用)
- KnowRob安装过程中的相关问题记录
- 读薄经典——《程序员修炼之道》
- 二叉树创建以及遍历方式
- 奇异值分解(SVD)原理详解及推导 (转)
- 远程控制的完善—遇到问题与解决方案
- 1006
- webkit移动开发笔记:html5中video与audio标签之无法自动播放的audio元素
- 搜索算法10之1017
- C#—Windows应用基础
- android+html5 上传图片兼容4.0 5.0 6.0
- MYSQL 的SQL 语句用法大全