zoukankan      html  css  js  c++  java
  • 二叉树的数组存储实现-c++代码

    • 这个实现方法比较粗糙。将二叉树所有可能的位置按次序拍好,新建树时,如果某位置没有元素,则值为0,如果有元素,则值为传入的值。
    • 另外新赋值时,需要指定要在哪一个节点的左叉还是右叉插入什么值的指针?
    • 其他还有删除元素,在此代码中等价为将数组该处的值置为0。等
    //.h文件
    #pragma once
    #include<iostream>
    #define __debug__
    using namespace std;
    class Array
    {
    public:
    	Array(int s);
    	~Array();
    	int get_node(int location);//根据索引寻找节点
    	bool add_head(int* node);//头节点
    	bool get_add(int location,int d, int* node);//添加元素
    	bool get_delete(int location);//删除元素
    	void traverse();//遍历
    private:
    	int s_size;
    	int* pSize;
    };
    
    //.cpp文件
    #include"Array.h"
    Array::Array(int s)
    {
    	s_size = s;
    	pSize = new int[s];
    	for (int i = 0; i < s; i++)
    	{
    		pSize[i] = 0;
    	}
    }
    
    Array::~Array()
    {
    	delete[]pSize;
    	pSize = NULL;
    }
    bool Array::add_head(int* node)
    {
    	pSize[0] = *node;
    	return true;
    
    }//头节点
    
    int Array::get_node(int location)
    {
    	if (location<0 || location>s_size)
    	{
    		return -1;
    	}
    	else if(pSize[location] == 0)
    	{	
    		return -1;
    	}
    	else
    	{
    		return pSize[location];
    	}
    }//根据索引寻找节点
    bool Array::get_add(int location, int d, int* node)
    {
    	if (location<0 || location>= s_size)
    	{
    		return false;
    	}
    	else if (pSize[location] == 0)
    	{
    		return false;
    	}
    	else
    	{
    		if (d == 0)//左节点
    		{
    			if ((location * 2 + 1) >= s_size)
    			{
    				return false;
    			}
    			else if (pSize[location * 2 + 1] != 0)
    			{
    				return false;
    			}
    			else
    			{
    				pSize[location * 2 + 1] = *node;
    				return true;
    			}
    		}
    		else if (d == 1)//右节点
    		{
    			if ((location * 2 + 2) >= s_size)
    			{
    				return false;
    			}
    			else
    			{
    				pSize[location * 2 + 2] = *node;
    				return true;
    			}
    		}
    		return false;
    	}
    
    }//添加元素
    bool Array::get_delete(int location)
    {
    	if (location<0 || location>= s_size)
    	{
    		return false;
    	}
    	else if (pSize[location] == 0)
    	{
    		return false;
    	}
    	else
    	{
    		pSize[location] = 0;
    		return true;
    	}
    }//删除元素
    void Array::traverse()
    {
    	for (int i = 0; i < s_size; i++)
    	{
    		cout << pSize[i] << endl;
    	}
    }//遍历
    //main.cpp文件
    #include"Array.h"
    
    int main()
    {
    	Array *a=new Array(6);
    	int m = 2;
    	int m1 = 4;
    	int m2 = 5;
    	a->add_head(&m);
    	a->get_add(0, 1, &m1);
    	a->get_add(0, 0, &m2);
    	//a->get_delete(1);
    	int m5 = a->get_node(4);
    	cout << m5 << endl;
    	cout << endl;
    	a->traverse();
    	delete a;
    	return 0;
    }
    
    Higher you climb, more view you will see.
  • 相关阅读:
    b站评论爬取
    推算身份证的生日位
    mac安装mysql
    H3C V7版本的系统默认权限
    H3C IRF2的三种配置情况
    一张图看懂高通QC1.0-QC4.0快充进化之路!QC2.0跟QC3.0充电区别
    云服务器 ECS Linux 软件源自动更新工具
    透明代理、匿名代理、混淆代理、高匿代理有什么区别?
    ping正常但是ssh到linux服务器很卡的解决方法
    Python GUI编程(Tkinter) windows界面开发
  • 原文地址:https://www.cnblogs.com/yyfighting/p/12500612.html
Copyright © 2011-2022 走看看