树--二叉树的数组实现
来源:互联网 发布:mac dare you 不好看 编辑:程序博客网 时间:2024/06/05 10:29
树--二叉树的数组实现
简要介绍:
树是节点的有限集合
度:当前结点的子节点的数量
叶子:(终端节点)
根:(非终端节点)
有序数:子节点不能互换顺序
无序数:子节点能互换顺序
深度:节点深度和树的深度
节点深度:第一层深度为1,第二层深度为2,第三层深度为3...
数的深度:当前树的节点所具有的最大深度
森林:多颗独立的树,一棵树看成由不同的子树,也是森林
前序遍历:先访问根,后访问左右节点
中序遍历:先访问左节点,然后访问根,最后访问右节点
后序遍历:先访问左右节点,后访问根
二叉树的数组表示:
//-----------------------------------------------
Tree.h
Tree.cpp
demo.cpp
//控制台运行得:
1 2 3 0 0 5 7
根的右节点的右节点:7
删除的节点:7
再次遍历:
1 2 3 0 0 5 0
//-------------------------------------------------------------------
//------------------------------------------------------------------
简要介绍:
树是节点的有限集合
度:当前结点的子节点的数量
叶子:(终端节点)
根:(非终端节点)
有序数:子节点不能互换顺序
无序数:子节点能互换顺序
深度:节点深度和树的深度
节点深度:第一层深度为1,第二层深度为2,第三层深度为3...
数的深度:当前树的节点所具有的最大深度
森林:多颗独立的树,一棵树看成由不同的子树,也是森林
二叉树:所有节点的度 <= 2;
二叉树的遍历:前序遍历、中序遍历、后序遍历前序遍历:先访问根,后访问左右节点
中序遍历:先访问左节点,然后访问根,最后访问右节点
后序遍历:先访问左右节点,后访问根
二叉树的数组表示:
//-----------------------------------------------
Tree.h
#ifndef TREE_H#define TREE_H//-----------------------------------//-----二叉树的数组表示--------------class Tree{ public: Tree(int size, int *pRoot);//大小,根节点 ~Tree(); int *searchNode(int nodeIndex);//按照索引找节点 bool addNode(int nodeIndex, int direction, int *pNode);//增加节点,direction为0是左节点,为1是右节点 bool deleteNode(int nodeIndex, int *pNode);//根据索引删除节点,并拿出来给*pNode void treeTraverse();//遍历 private: int *m_pTree;//节点指针 int m_iSize;//大小};#endif
Tree.cpp
#include"Tree.h"#include<iostream>using namespace std;Tree::Tree(int size, int *pRoot){ m_iSize = size; m_pTree = new int[m_iSize]; m_pTree[0] = *pRoot; for(int i = 1; i < size; i++){ m_pTree[i] = 0; }}Tree::~Tree(){ delete []m_pTree; m_pTree = NULL;}int *Tree::searchNode(int nodeIndex){ if(nodeIndex < 0 || nodeIndex >= m_iSize){ return NULL; } if(0 == m_pTree[nodeIndex]){ return NULL; } return &m_pTree[nodeIndex];}bool Tree::addNode(int nodeIndex, int direction, int *pNode){ if(nodeIndex < 0 || nodeIndex >= m_iSize){ return false; } if(0 == m_pTree[nodeIndex]){ return false; } //-------------------------------------- if(0 == direction){//左节点 if(nodeIndex*2 + 1 >= m_iSize){ return false; } if(0 != m_pTree[nodeIndex*2 + 1]){//说明里面已经有元素了 return false; } m_pTree[nodeIndex*2 + 1] = *pNode; return true; } //--------------------------------------- if(1 == direction){//右节点 if(nodeIndex*2 + 2 >= m_iSize){ return false; } if(0 != m_pTree[nodeIndex*2 + 2]){ return false; } m_pTree[nodeIndex*2 + 2] = *pNode; return true; } return false; }bool Tree::deleteNode(int nodeIndex, int *pNode){ if(nodeIndex < 0 || nodeIndex >= m_iSize){ return false; } if(0 == m_pTree[nodeIndex]){ return false; } *pNode = m_pTree[nodeIndex]; m_pTree[nodeIndex] = 0; return true;}void Tree::treeTraverse(){ for(int i = 0; i < m_iSize; i++){ cout << m_pTree[i] << " "; } cout << endl;}
demo.cpp
#include"Tree.h"#include<iostream>using namespace std;//-------------------int main(){ int root = 1; Tree *p = new Tree(7, &root); int node[] = {2, 3, 5, 7, 8}; p->addNode(0, 0, &node[0]);//根的左节点 p->addNode(0, 1, &node[1]);//根的右节点 p->addNode(2, 0, &node[2]);//根的右节点的左节点 p->addNode(2, 1, &node[3]); //根的右节点的右节点 p->treeTraverse(); cout << "\n根的右节点的右节点:" << *(p->searchNode(6)) << endl; int t = 0; p->deleteNode(6, &t); cout << "\n删除的节点:" << t << endl; cout << "\n再次遍历:" << endl; p->treeTraverse(); delete p;//一不小心写成delete []p;就错了,调试半天,哎~ p = NULL; system("pause"); return 0;}
//控制台运行得:
1 2 3 0 0 5 7
根的右节点的右节点:7
删除的节点:7
再次遍历:
1 2 3 0 0 5 0
//-------------------------------------------------------------------
//------------------------------------------------------------------
0 0
- 二叉树的数组实现
- 数组实现二叉树
- 数组实现二叉树
- 树--二叉树的数组实现
- 静态数组实现的二叉搜索树
- 二叉搜索树的数组实现
- 二叉搜索树-数组的实现方式
- 二叉树的操作实现---数组篇
- 数组实现完全二叉树
- 数组实现二叉查找树
- C++实现二叉树数组
- 九度 题目1009:二叉搜索树 (静态数组构建二叉树\二叉树的数组实现)
- 堆的实现-用数组表示的完全二叉树
- 《数据结构之树篇》--二叉树的数组实现
- 二叉树的几种实现方式(1)数组法
- Uva122 Trees on the level 二叉树的数组实现
- C++数组实现最简单的二叉树
- Javascript实现从小到大的数组转换成二叉搜索树
- Android工具类--获取屏幕信息类
- oracle 执行计划学习
- 约瑟夫问题JAVA算法
- Java se项目:记事本
- JavaSrcipt的Object.keys()
- 树--二叉树的数组实现
- 期货交易流程
- 数组形参2
- MyBatis学习之三:动态SQL语句
- spring的事务配置详解
- CSS3:各种浏览器私有属性
- Android Dialog的 WindowLeaked窗体泄露异常
- GDB调试程序
- 【牛客网】矩阵中的路径