数据结构实验:二叉树的层次构造、前中后序遍历、高度depth、叶子节点数leafs、交换左右子节点swap

5420数据结构实验--二叉树中序遍历(二叉链表存储)

void inorder(Bitnode *t) //中序 
{
    if(t->left)inorder(t->left);
    cout<<" "<<t->val;
    if(t->right)inorder(t->right);
}

 

5421数据结构实验--后序遍历二叉树(二叉链表存储)

void postorder(Bitnode *t) //后序 
{
    if(t->left)postorder(t->left);
    if(t->right)postorder(t->right);
    cout<<" "<<t->val;
}

 

5422数据结构实验--先序遍历二叉树(二叉链表存储)

void preorder(Bitnode *t) //先序 
{
    cout<<" "<<t->val;
    if(t->left)preorder(t->left);
    if(t->right)preorder(t->right);
    
}

 

5423数据结构实验—求二叉树高度(二叉链表存储)

int depth(Bitnode *t) //计算二叉树高度 
{
    if(!t)return 0;
    if(t->val==0)return 0;
    int ls = depth(t->left);
    int rs = depth(t->right);
    return ls>rs?(ls+1):(rs+1);
}

 

5424数据结构实验—求二叉树叶子结点数(二叉链表存储)

int leafs(Bitnode *t) //计算叶子数 
{
    if(!t)return 0;
    if(!t->left && !t->right)return 1;
    return leafs(t->left)+leafs(t->right);
}

 

5425数据结构实验—交换二叉树结点的左右孩子(二叉链表存储)

void leveltraversing(Bitnode *t) //层次遍历 ,队列实现 
{
    if(!t)return;
    Bitnode *rt,*q[1001];
    int tail = 1,head = 1;
    q[tail++] = t;
    while(head<tail)
    {
        rt = q[head];
        cout<<" "<<rt->val;
        if(rt->left)q[tail++] = rt->left;
        if(rt->right)q[tail++] = rt->right;
        head++; 
    }
}
struct Bitnode* child_swap(Bitnode *t) //交换左右子节点 
{
    if(!t)return 0;
    if(t->left)
    t->left = child_swap(t->left); //寻找最深处左节点 
    if(t->right)
    t->right = child_swap(t->right);//寻找最深处右节点 
    Bitnode *rt; //交换 
    rt = t->left;
    t->left = t->right;
    t->right = rt;
}

 ——————————————————————————————————————————

树的层次构造如下

#include<bits/stdc++.h>
using namespace std;
struct Bitnode {
    int val;
    struct Bitnode *left,*right;
};
 
struct Bitnode a[520];
struct Bitnode* CreatBitree_level()
{
    int k=0,i,j,n;
    while(scanf("%d",&n),n!=-1)
        a[k++].val=n;
    for(i=0,j=1;i<k;i++,j++)
    {
        if(i+j>=k||a[i+j].val==0) a[i].left=NULL;
        else a[i].left=&a[i+j];
        if(i+j+1>=k||a[i+j+1].val==0) a[i].right=NULL;
        else a[i].right=&a[i+j+1];
    }
    return &a[0];
}

 

posted @ 2023-02-20 15:00  CRt0729  阅读(60)  评论(0编辑  收藏  举报