数据结构与算法

数据结构与算法—创建一颗二叉树

用于示例的主函数main.cpp

#include <iostream>
#include <string>
#include "tree.h"

using std::string;
using std::stack;

int main()
{
    BiTree<string> strBiTree;

    string strArr[] = 
    {
                          "0",
                "1",                  "2", 
           "3",      "4",       "5",        "6", 
        "7", "8", "9", "10", "11", "12", "13", "14"
    };

    int size = sizeof(strArr)/sizeof(strArr[0]);
	//数组strArr用于待生成二叉树
	//0为数组元素索引的初始值
	//size为数组元素个数
    strBiTree.creatBiTree(strArr, 0, size);
    
    return(0);
}

包含生成树的头文件tree.h

#ifndef __TREE_H__
#define __TREE_H__
#include <queue>

using std::queue;

template <typename T>
class BTNode{
public:
    T el;  //节点的值
    BTNode<T> *left, *right;  //左和右孩子节点
    BTNode(){
        left = right = NULL;
    }
    BTNode(const T& e, BTNode<T> *l = NULL, BTNode<T> *r = NULL){
        el = e; left = l; right = r;
    }
};

template <typename T>
class BiTree{
protected:
    BiTree<T> *root;
public: 
    BiTree(){
        root = NULL;
    }
    ~BiTree(){
    }
    BTNode<T>* creatBiTree(T* arr, int index, 
                           int arrSize);
};

/***************************************************************
* Description : 创建一颗二叉树,使用递归法
*               递归停止条件: 数组元素的索引值不超过数组元素个数
*               递归函数个数:2个,分别进行左树和右树的递归
* Input : 用于创建二叉树的数组,数组索引,数组元素个数
* Output: 返回当前创建的头结点的地址,作为上一节点的左或右孩子
***************************************************************/
template <typename T>
BTNode<T>* BiTree<T>::creatBiTree(T* arr, int index, int arrSize){
    BTNode<T>* root = NULL;
    if(index < arrSize){
        root = new BTNode<T>(arr[index]);
        std::cout << "第 " << index << " 个元素:" \
            << root->el << '\n';

        index++;
        root->left = creatBiTree(arr, (2*index-1), arrSize);
        root->right= creatBiTree(arr, (2*index), arrSize);
    }
    return(root);
}
#endif

输出

数据结构与算法

备注

这里用于示例的数组strArr对元素的个数右要求,就是说应当输入完全二叉树,若数组元素不构成完全二叉树,则可以自己对代码进行修改。

上一篇:查找二叉树中x的值在第几层,非递归


下一篇:二叉树的建立与遍历