一次讲清【数据结构算法题——树 备考】

一、二叉树算法题备考方向

   1.树的遍历

  • 前、中、后序列遍历(个人认为只备考递归算法即可)
  • 层序遍历 

    2. 树的属性

  • 求树的高度

  • 求树的宽度

  • 求WPL

    3.特殊树形判定

  • 是否为二叉排序树(左<中<右)
  • 二叉树是否平衡(|左-右|<=1)
  • 是否为完全二叉树

二、相关代码

1.二叉树节点定义

 //二叉树的结点定义(链式存储)
 typedef struct BiTNode{
     int data;
     struct BiTNode *lchild,*rchild;
 }BiTNode,*BiTree;

2.前序遍历PreOrder

//前序遍历 (根左右)
void PreOrder(BiTNode *root)
{
    if(root == NULL)
        return;
    Visit(root); //可以根据题目灵活写visit函数
    PreOrder(root->lchild);
    PreOrder(root->rchild);
}

3.中序遍历InOrder

//中序列遍历
void InOrder(BiTNode *root)
{
    if(root == NULL)
        return;
    PreOrder(root->lchild);
    Visit(root);  //可以根据题目灵活写visit函数
    PreOrder(root->rchild);
}

4.后序遍历

//后序列遍历
void PostOrder(BiTNode *root)
{
    if(root == NULL)
        return;
    PreOrder(root->lchild);
    PreOrder(root->rchild);
    Visit(root);  //可以根据题目灵活写visit函数
}

5.层次遍历

算法思想是通过以下4步:首先初始化一个队列,判断队列是否为空,如果不为空,则让队头元素出队,并且访问队头元素,且让队头元素的左、右孩子分别入队。

//初始化队列
void InitQueue(Queue &Q);
//判断队列是否为空
bool IsEmpty(Queue &Q);
//新元素x入队
void EnQueue(Queue &Q,BiTNode* x);
//队头元素出队并返回x为队头
void DeQueue(Queue &Q,BiTNode* &x)

实现代码如下:

//层序遍历
void LevelOrder(BiTNode *T)
{
    Queue Q;
    InitQueue(Q);
    BiTNode *p;
    EnQueue(Q,T);
    while (!IsEmpty(Q))
    {
        DeQueue(Q,p);//p是为了返回队头元素
        visit(p);
        if(p->lchild != NULL)
        {
            EnQueue(Q,p->lchild);
        }
        if(p->rchild != NULL)
        {
            EnQueue(Q,p->rchild);
        }
    }

}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值