zoukankan      html  css  js  c++  java
  • 数据结构基本知识点(二)

    • 二叉树结点定义
    typedef struct BTNode
    {
        char data;
        struct BTNode *lchild;
        struct BTNode *rchild;
    }BTNode;
    • 二叉树遍历之先序遍历

    如果二叉树为空树,什么都不做。否则:1.访问根结点。2.先序遍历左子树。3.先序遍历右子树

    void PreOrder(BTNode *p)
    {
        if (p!=NULL)
        {
            visit(p);//假设访问函数visit()已经定义过
            PreOrder(p->lchild);
            PreOrder(p->rchild);
        }
    }
    • 二叉树遍历之中序遍历
    void InOrder(BTNode *p)
    {
        if (p!=NULL)
        {
            InOrder(p->lchild);
            visit(p);//假设访问函数visit()已经定义过,其中包含了对结点P的各种操作。
            InOrder(p->rchild);
        }
    }
    • 二叉树遍历之后序遍历
    void PostOrder(BTNode *p)
    {
        if (p!=NULL)
        {
            PostOrder(p->lchild);
            PostOrder(p->rchild);
            visit(p);//假设visit已经定义过,其中包含了对结点的各种访问操作
        }
    }
    • 求二叉树深度
    int getDepth(BTNode *p)
    {
        int ld,rd;
        if (p==NULL)
        {
            return 0;
        }
        else 
        {
            ld=getDepth(p->lchild);
            rd=getDepth(p->rchild);
            return (ld>rd?ld:rd)+1;
        }
    }
    • 二叉树之层次遍历

    要进行层次遍历需要建立一个循环队列。先将二叉树头结点入队列,然后出队列,访问该结点,如果它有左子鼠,便将左子树根节点入队列,如果它有右子树,便将右子树根结点入队。然后出对了,对出队结点访问,如此反复,直到队列为空为止。

    void level(BTNode *p)
    {
        int front, rear;
        BTNode *que[maxSize];
        front=rear=0;
        BTNode *q;
        if (p!=NULL)
        {
            rear=(rear+1)%maxSize;
            que[rear]=p;//根节点入队
            while (front!=rear)
            {
                front=(front+1)%maxSize;
                q=que[front];
                visit(q);
                if (q->lchild!=NULL)
                {
                    rear=(rear+1)%maxSize;
                    que[rear]=q->lchild;
                }
                if (q->rchild!=NULL)
                {
                    rear=(rear+1)%maxSize;
                    que[rear]=q->rchild;
                }
            }
        }
    }
  • 相关阅读:
    [匈牙利算法] 洛谷 P1640 连续攻击
    [dfs] Jzoj P5916 flow
    [bfs] Jzoj P3522 迷宫花园
    [二分][状压dp] Jzoj P3521 道路覆盖
    [模拟] Jzoj P3520 原根
    [并查集] Jzoj P5914 盟主的忧虑
    [树上差分][子树求和][树形dp] Jzoj P5911 Travel
    [思维][暴力] Jzoj P5912 VanUSee
    [dfs][离散化] Jzoj P5910 DuLiu
    [cdq分治][树的重心] 洛谷 P3806 点分治1
  • 原文地址:https://www.cnblogs.com/shinecox/p/3140327.html
Copyright © 2011-2022 走看看