zoukankan      html  css  js  c++  java
  • 【数据结构】二叉树基本内容整理(一)

    一、二叉树的定义:度数(每个节点所有的子树的最大值)为2的数。

    二、二叉树的性质:

    1.在二叉树的第 i 层上最多有 2 ^ (i - 1) 个结点;

    2.深度为 k 的二叉树最多有 2 ^ k - 1 个结点;

      2-1.一棵深度为 k 且有 2 ^ k - 1 个结点的二叉树被称为满二叉树

      2-2.将满二叉树的每一个结点从上而下,从左到右编上序号(1~2 ^ k - 1)。一棵深度为 k ,有 n 个结点的二叉树当且仅当其每一个结点都与深度为 k 的满二叉树一一对应时(即只有最后倒数第二层有度数不为2的结点,只有最后一层结点相对于满二叉树有缺失,且最后一层缺失的结点是从最右到左连续的),这棵树被称为完全二叉树

    3.对于任意一棵二叉树,其叶结点数一定比度为2的结点数多1。即:n0 = n2 + 1

    4.具有 n 个结点的完全二叉树的深度为 floor(log2 n) + 1(floor指向下取整);

    5.对于一棵 n 个结点的完全二叉树,对任意一个结点(编号为 i ),有:

      5-1.如果 i = 1,那么此结点为根结点,否则其父结点编号为 floor(i / 2)(在程序中可直接写为 i / 2);

      5-2.如果 2*i > n,则此结点没有孩子,是根结点;如果 2*i == n,则此结点只有左孩子,其编号为 2*i ;否则此节点有左孩子和右孩子,编号分别为 2*i 和 2*i + 1。

    三、二叉树的存储:链式存储结构:

    1 struct node
    2 {
    3      DATA_TYPE data;//数据
    4      node* leftChild,rightChild;//左孩子和右孩子
    5 };
    6 node* bt;//根结点

    四:二叉树的遍历(每种遍历在二叉树为空时不进行操作)

    1.先序遍历:(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树(根->左->右)

    2.中序遍历:(1)中序遍历左子树;(2)访问根结点;(3)先序遍历右子树(左->根->右)

    3.后序遍历:(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点(左->右->根)

    void pre(node* bt)//先序遍历
    {
        if(bt)
        {
            cout<<bt->data;
            pre(bt->leftChild);
            pre(bt->rightChild);
        }
    }
    void in(node* bt)//中序遍历
    {
        if(bt)
        {
            in(bt->leftChild);
            cout<<bt->data;
            in(bt->rightChild);
        }
    }
    void post(node* bt)//后序遍历
    {
        if(bt)
        {
            post(bt->leftChild);
            post(bt->rightChild);
            cout<<bt->data;
        }
    }
  • 相关阅读:
    Python安装appium 遇见的报错
    appium
    QQ邮箱/微信邮箱发送邮件
    Python-变量
    神秘的咒语
    宿命的PSS
    E. Congruence Equation
    D. Substring
    leetcode 761. Special Binary String
    F
  • 原文地址:https://www.cnblogs.com/jiangyuechen/p/12622488.html
Copyright © 2011-2022 走看看