树结构及其算法-用数组来实现二叉树

目录

树结构及其算法-用数组来实现二叉树

C++代码


树结构及其算法-用数组来实现二叉树

使用有序的一维数组来表示二叉树,首先可将此二叉树假想成一棵满二叉树,而且第层具有个节点,按序存放在一维数组中。首先来看看使用一维数组建立二叉树的表示方法以及数组索引值的设置。

可以看出此一维数组中的索引值有以下关系:

  1. 左子树的索引值是父节点的索引值乘2。
  2. 右子树的索引值是父节点的索引值乘2加1。

接着来看如何以一维数组建立二叉树的实例,实际上就是建立一棵二叉查找树。这是一种很好的排序应用模式,因为在建立二叉树的同时数据就经过了初步的比较判断,并按照二叉树的建立规则来存放数据。二叉查找树具有以下特点:

  1. 可以是空集合,若不是空集合,则节点上一定要有一个键值。
  2. 每一个数根的值需大于左子树的值。
  3. 每一个树根的值需小于右子树的值。
  4. 左右子树也是二叉查找树。
  5. 树的每个节点值都不相同。

C++代码

cpp 复制代码
#include<iostream>
using namespace std;

class Tree {
private:
	int* treeNode;
	int size;
	int level;
public:
	Tree(int size) {
		treeNode = new int[size] {0};
		this->size = size;
		level = 0;
	}
	void SetTree(int* tempData, int tempSize) {
		for (int i = 0; i < tempSize; i++) {
			for (level = 1; treeNode[level] != 0;) {
				if (tempData[i] > treeNode[level])
					level = level * 2 + 1;
				else
					level = level * 2;
			}
			treeNode[level] = tempData[i];
		}
	}
	void PrintTree() {
		for (int i = 1; i < size; i++)
			cout << treeNode[i] << " ";
		cout << endl;
	}
};

int main() {
	int data[]{ 6, 3, 5, 9, 7, 8, 4, 2 };
	cout << "原始数据:" << endl;
	for (int i = 0; i < 8; i++)
		cout << data[i] << " ";
	cout << endl;

	Tree tree(16);
	tree.SetTree(data, 8);
	cout << "二叉树数据:" << endl;
	tree.PrintTree();

	return 0;
}

输出结果

相关推荐
John_ToDebug2 小时前
浏览器扩展延迟加载优化实战:如何让浏览器启动速度提升50%
c++·chrome·windows
是娇娇公主~2 小时前
C++ 中 std::deque 的原理?它内部是如何实现的?
开发语言·c++·stl
SuperEugene3 小时前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
Fly Wine3 小时前
Leetcode之有效字母异位词
算法·leetcode·职场和发展
xuxie994 小时前
N11 ARM-irq
java·开发语言
程序员夏末4 小时前
【LeetCode | 第七篇】算法笔记
笔记·算法·leetcode
wefly20174 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma1509805 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php
寂静or沉默5 小时前
2026最新Java岗位从P5-P7的成长面试进阶资源分享!
java·开发语言·面试
csdn_aspnet5 小时前
C/C++ 两个凸多边形之间的切线(Tangents between two Convex Polygons)
c语言·c++·算法