首页 树的学习笔记
文章
取消

树的学习笔记

二叉树

基本概念

1.记录根节点的高度为0,那么一个满二叉树的结点个数为2^(h+1)-1

利用等比求和…..,最少为h+1

二叉树的实现

1.基本结点BinNode 模板类

图例

1
2
3
4
5
6
7
8
9
10
11
12
#define BinNodePosi(T) BinNode<T>* //结点位置
template <typename T> struct BinNode{
    BinNodePosi(T) parent,lChild,rChild;// 父亲 孩子
    T data; int heigt;int size(); //高度 规模
    BinNodePosi(T) insertAsLC(T const &);//左孩子插入结点
    BinNodePosi(T) insertAsRC(T const &);//右孩子插入结点
    BinNodePosi(T) succ();//(中序意义下) 当前节点直接后继
    template <typename VST> void travlevel (VST &);//层次遍历
    template <typename VST> void travPre (VST &);//先序遍历
    template <typename VST> void travIn(VST &);//中序遍历
    template <typename VST> void travPost(VST &);//后续遍历
}
插入结点
1
2
3
template <typename T> BinNOdePosi(T) BinNode<T>::insertAsLC(T const & e){
    return lChild=new BinNode(e,this);
}

右孩子结点插入相似O(1)

size的实现
1
2
3
4
5
6
template <typename> int BinNode<T>::size(){
    int s=1;// 计入根本身
    if(lChild) s+=lChild->size();//递归计算左子树
    if(rChild) s+=rChild->size();
    return s;
}

时间复杂度O(n)

2.树 的模板类实现BinTree
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <typename T> class BinTree{
protected:
    int size; //规模
    BinNodePosi(T) root; //根节点
    virtual int updateHeight(BinNodePosi(T) x)//更新结点x的高度
public:
    int size()const{
        return size;
    }
    bool empty()const {
        return !root;
    }//判空
    BinNodePosi(T) root() const{
        return root;
    }//树根
   /* 还有一群遍历算法*/
}
高度更新

高度: 一结点到其叶子结点的最大深度(空树的高度为-1)

本文由作者按照 CC BY 4.0 进行授权
文章内容