关于二叉树结构的各种知识做一个整理 创建二叉树的方法一定要注意 是用0作为结点为空的条件的

#include<bits/stdc++.h>
using namespace std;
struct Tnode
{
     int data;
     struct Tnode* left;
     struct Tnode* right;
     int layer;

};
typedef struct Tnode *btree;
int height(btree root)//递归求数的高度  传入一个二叉树   根节点自身算作一层高度
{
   if(!root) //如果是一颗空树 返回0
       return 0;
   else  //如果非空 则 求求其左右子树高度 取最大再加上自身
   {
       int hleft=height(root->left);  //左子树高
       int hright=height(root->right);   //右子树高
       return max(hleft,hright)+1;//这里的1代表当前根节点的高度

   }


}
void creat_btree(btree &root)
{
  int element;
   cin>>element;
   if(element==0)
   {
      root=NULL;
      return;
   }

   else
   {
      root=(btree)malloc(sizeof(struct Tnode));
      root->data=element;
      root->left=NULL;
      root->right=NULL;
      creat_btree(root->left);
      creat_btree(root->right);


   }


}
void preorder_travel(btree root)
{
    if(root)
    {
     cout<<root->data<<" ";
     preorder_travel(root->left);
     preorder_travel(root->right);

    }
    else
       return ;

}
void inorder_travel(btree root)
{
   if(root)
    {

     inorder_travel(root->left);
     cout<<root->data<<" ";
     inorder_travel(root->right);

    }
    else
       return ;

}
void postorder_travel(btree root)
{
     if(root)
    {

     preorder_travel(root->left);
     preorder_travel(root->right);
     cout<<root->data<<" ";

    }
    else
       return ;

}
void layer_travel(btree root)
{
     queue<btree>q;//存放指向结点的指针 不能存放数据 不然就会丢失左右孩子
     q.push(root);
     root->layer=1;
     while(!q.empty())
     {
        btree p=q.front();//取出队首
        q.pop();
        cout<<p->data<<" ";
        if(p->left)
        {
           q.push(p->left);
           p->left->layer=p->layer+1;

        }

        if(p->right)
        {

             q.push(p->right);
             p->right->layer=p->layer+1;
        }


     }

}

int main()
{
   btree root;//创建一个指针
   creat_btree(root);//创建二叉树
   preorder_travel(root);//前序遍历二叉树
   cout<<endl;
   inorder_travel(root);//中序遍历二叉树
   cout<<endl;
   postorder_travel(root);//后序遍历二叉树
   cout<<endl;
   layer_travel(root);//层次遍历二叉树 队列中存放的是地址  并标记了树中每个结点的层次
   cout<<endl;
   cout<<height(root);//求二叉树的高度


    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值