二叉树详谈(一)

二叉树详谈

1.二叉树就是有很多节点(n>=0),如果n=0,则此二叉树为空二叉树;当n>0时,二叉树满足条件:只有一个根节点(root),没有前驱节点,但是有0,1或2直接的后继节点

如图所示:


 

 

2.二叉树的五种基本形态

(1)空二叉树

(2)只有一个节点的二叉树

(3)只有左子树的二叉树

(4)只有右子树的二叉树

(5)既有左子树又有右子树的二叉树

3.二叉树的两种特殊形态

(1)满二叉树:每个分支点的度数都是2,且叶子节点都在同一个层次上。

(2)完全二叉树:满二叉树都可以和同深度的满二叉树相对比,一一对应。

二叉树的实现(c++

1.二叉树的创建

 

 template<class Type>

 void BinTree<Type>::CreateBinTree(BinTreeNode<Type>*&t)

 {

      Type Item;

    cin >> Item;

    if(Item == refval)

     t = NULL;

    else

     {

         t = new BinTreeNode<Type>(Item);

          CreateBinTree(t->leftChild);

         CreateBinTree(t->rightChild);

     }

 }

2.二叉树的遍历

(1)前序遍历

template<class Type>

void BinTree<Type>::PreOrder(BinTreeNode<Type>*t)const

 {

     if(t!=NULL)

    {

       cout<<t-data<<"";

        PreOrder(t->leftChild);

         PreOrder(t->rightChild);

    }

 }

(2)中序遍历

void BinTree<Type>::InOrder(BinTreeNode<Type>*t)const

 {

    if(t!=NULL)

   {

         InOrder(t->leftChild);

         cout<<t->data<<"";

         InOrder(t->rightChild);

     }

 }

(3)后续遍历

void BinTree<Type>::PostOrder(BinTreeNode<Type>*t)const

 {

     if(t!=NULL)

     {

         PostOrder(t->leftChild);

         PostOrder(t->rightChild);

        cout<<t->data<<"";

    }

 }

3.二叉树的查找

template<class Type> BinTreeNode<Type>*BinTree<Type>::Find(BinTreeNode<Type>*t,const Type &key)const

 {

    if(t == NULL)

        return NULL;

        if(t->data == key)

         return t;

  

     BinTreeNode<Type>*p = Find(t->leftChild,key);

     if(p != NULL)

         return p;

         return Find(t->rightChild,key);

 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值