关闭

数据结构_树_二叉树性质/二叉树存储结构/二叉树相应操作(建立、遍历 )

标签: 数据结构二叉树性质二叉树遍历二叉树建立前中序遍历
121人阅读 评论(0) 收藏 举报
分类:

二叉树性质:性质1:二叉树第i层上至多有2^(i-1)个结点       (i >= 1)

                      性质2:深度为k的二叉树至多有2^k-1个结点(k >= 1)

                      性质3:对任意二叉树,叶子结点个数count = n(度为2的结点个数)  + 1;

                      性质4:具有n个结点的二叉树,深度为不大于(logn/log2)的最大整数 + 1

                      性质5:有n个结点的完全二叉树,从上往下从左往右编号为i,则不大于i/2的最大整数位该结点的双亲

                                   点,2i为该结点的左孩子结点,2i+1位该结点的右孩子节点。

二叉树存储结构:顺序存储结构,二叉链表

顺序存储结构:

对于顺序存储结构存储树这种一对多的数据结构来说比较困难,因为没有明确的规律可言,。但是对于完全二叉树,我们可以通过简单的一维数组的下标进行相应的计算([i/2]、2i、2i+1)得出当前结点的双亲节点、左孩子节点和右孩子节点等。但是,此存储结构有一缺点,如下:


就会造成大量的存储空间浪费,所以顺序存储结构一般只适应于完全二叉树。

二叉链表:

由于二叉树每一个节点最多有两个孩子,所以一个数据域data,两个指针域lchild,rchild的设计比较自然。

#define char ElemType
typedef struct BtNode
{
      ElemType data;    //当前结点的数据域
      BitNode *lchild;   //指向左孩子的指针
      BitNode *rchild;   //指向右孩子的指针
}BtNode,*BTree;

二叉树的相应操作:

    BtTree();
    ~BtTree();
    void setTree(BtNode *r){tree = r; }
    BtNode *createBtTree();
    void inOrder(){ inOrder(tree); cout<<endl;}                //中序遍历(递归) 
    void NotReInOrder();                                       //中序遍历(非递归) 
    void preOrder(){preOrder(tree);cout<<endl;}                //前序遍历(递归)   
    void NotRePreOrder();                                      //前序遍历(非递归)   
    void postOrder(){postOrder(tree);cout<<endl; }             //后序遍历(递归) 
    void NotRePostOrder();                                     //后序遍历(非递归)   
    int BtTreeSize(){return BtTreeSize(tree); cout<<endl;}     //求结点个数  
    int BtTreeLeaves(){return BtTreeLeaves(tree); cout<<endl;} //求叶子节点个数  
    int BtTreeHeight(){return BtTreeHeight(tree);cout<<endl; } //求树高  

//用于子类继承
protected: 
    void inOrder(BtNode *);                                   //中序遍历   
    void preOrder(BtNode *);                                  //前序遍历  
    void postOrder(BtNode *);                                 //后序遍历 
    int BtTreeSize(BtNode *);                                 //结点个数 
    int BtTreeLeaves(BtNode *);                               //叶子结点   
    int BtTreeHeight(BtNode *);                               //树高 

传入二级指针是为了在函数体内部改变指针的指向。具体的代码实现如下:

二叉树操作实现:[C++]

BtTree.h:



BtTree.cpp:









1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:12772次
    • 积分:585
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:7篇
    • 译文:0篇
    • 评论:6条
    最新评论