数组实现二叉树
来源:互联网 发布:2017软件开发工资 编辑:程序博客网 时间:2024/06/11 19:08
下面我们构造一个简单的二叉树,主要看清构造二叉树的思路;
解释一下,这里我们将二叉树的左节点和右边节点分别用0和1表示,同时将不存在的节点的值用0来表示.
binaryTree.h
class BinaryTree{public: BinaryTree(int nSize, int *root); bool addTreeNode(int pos, int* parent, int direct, int *node); bool delTreeNode(int i); void traverseTree(); ~BinaryTree(); friend bool cimi(int x);private: int *m_Ptree; int size_tree;};bool cimi(int x){ return (x&(x - 1)) ? true : false;}
createBinaryTree.cpp
#include <iostream>#include <cstdlib>#include <cmath>#include "binaryTree.h"using namespace std;BinaryTree::BinaryTree(int size, int *root){ m_Ptree = new int[size]; for (int i = 0; i < size; i++){ m_Ptree[i] = 0; } m_Ptree[0] = *root; size_tree = size;}bool BinaryTree::delTreeNode(int i){ if (i < 0 || i >= size_tree){ return false; } if (m_Ptree[i] == 0){ return false; } m_Ptree[i] = 0;}bool BinaryTree::addTreeNode(int pos, int *parent,int direction,int *node){ if (direction == 0){ if (pos * 2 + 1 < 0 || pos * 2 + 1 >=size_tree){ cout << "左边超出" << endl; return false; } if (m_Ptree[pos * 2 + 1] != 0){ cout << "左孩子已经有值" << endl; return false; } cout << "第" << pos * 2 + 1 << "个子节点" << endl; m_Ptree[pos * 2 + 1] = *node; } else{ if (pos * 2 + 2 < 0 || pos * 2 + 2 >= size_tree){ return false; } if (m_Ptree[pos * 2 + 2] != 0){ return false; } cout << "第" << pos * 2 + 2 << "个子节点" << endl; m_Ptree[pos * 2 + 2] = *node; }}void BinaryTree::traverseTree(){ for (int i = 0; i < size_tree; i++){ cout << m_Ptree[i] << " "; } cout << endl;}BinaryTree::~BinaryTree(){ delete[] m_Ptree; m_Ptree = NULL;}int main(){ int root = 10; BinaryTree bTree(7, &root); int node1 = 7; int node2 = 8; bTree.addTreeNode(0, &root, 0, &node1); bTree.addTreeNode(0, &root, 1, &node2); int node3 = 6; int node4 = 10; bTree.addTreeNode(1, &node1, 0, &node3); bTree.addTreeNode(1, &node1, 1, &node4); int node5 = 100; int node6 = 70; bTree.addTreeNode(2, &node2, 0, &node5); bTree.addTreeNode(2, &node2, 1, &node6); bTree.traverseTree(); bTree.delTreeNode(6); bTree.traverseTree();}
参考网站:(http://www.imooc.com/learn/673
阅读全文
0 0
- 数组实现二叉树
- 数组实现二叉树
- 数组实现完全二叉树
- 数组实现二叉查找树
- C++实现二叉树数组
- 二叉树的数组实现
- 树--二叉树的数组实现
- 静态数组实现的二叉搜索树
- 二叉搜索树的数组实现
- 二叉搜索树-数组的实现方式
- 二叉树数组存储结构实现
- 二叉树数组实现[C/C++]代码
- c#使用数组实现二叉查找树
- 二叉树的操作实现---数组篇
- 数组转二叉树 java实现
- 二叉树【数组实现】基础练习
- 数据结构之二叉树 使用数组实现
- 数据结构 二叉堆 数组实现
- Ubuntu下使用USB3.2接口
- Linux中,cmake-3.x 编译安装说明
- 用JavaScript来实现栈
- 第八章 流量复制/AB测试/协程
- MySQL数据库优化经验详谈(服务器普通配置)
- 数组实现二叉树
- keras自动编码器实现系列之卷积自动编码器
- AdversarialNetsPapers: The classical Papers about adversarial nets
- Android_设置软盘监听事件
- 单例模式
- “玲珑杯”线上赛 Round #17 震惊,99%+的中国人都会算错的问题(容斥原理)
- KMP算法 Next数组详解(【洛谷3375】KMP字符串匹配 )
- hadoop3种集群方式搭建---独立模式
- 阅读-《诗经·秦风·无衣》