luciferzf 发表于 2017-8-5 09:23:38

《数据结构与算法》——二叉树

1.视频一共介绍了三种储存方式,父母,孩子,以及父母和孩子。利用父母储存法,在每一个节点都保存了父母的地址,所以根据儿子节点我们可以快速地找到它的父母;同理,孩子储存法和父母孩子储存法则能快速地找到该节点的孩子,或者孩子和父母。
2.满二叉树:节点个数n和深度k满足n=2^k-1,即除了叶子其他节点都有两个子节点。
完全二叉树:根据层编号后,编号与满二叉树一致。
——>满二叉树是一种特殊的完全二叉树
——>完全二叉树的度为0的节点个数n0,度为2的节点个数n2,满足n0=n2+1。
3.完全二叉树根据层编号后,满足
——>是i父母节点,若i*2>n,则该节点没有左节点;若i*2+1>n,则该节点没有子节点
4.二叉树的遍历
1)前序遍历:若二叉树为空,则返回;否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树
2)后序遍历:从左到右先子叶后节点的方式遍历访问左右子树,最后访问根节点。
3)中序遍历:从根节点开始,先中序遍历左子树,然后访问根节点,最后再中序遍历右子树。
4)层序遍历:从根节点开始,从上往下,从左往右逐层遍历

5.二叉树的建立和遍历
1)建立:定义一个有着两个指针的结构体,利用递归的方法,将数据不断地从上到下,从左到右地储存在二叉树中完成建立
2)遍历:根据根节点,我们可以利用四种遍历方式,用递归的方式实现遍历#include<cstdlib>
#include<cstdio>
#include<iostream>
using namespace std;

class bitree
{
public:
        char data;
        bitree *l, *r;
};

void Create(bitree *&p)
{
        char c;
        scanf_s("%c", &c);
        if (' ' == c)
        {
                p = NULL;
                return;
        }
        else
        {
                p = new bitree;
                p->data = c;
                Create(p->r);
                Create(p->l);
        }
}

void TreeTravel(bitree *p,int level)
{
        if (p != NULL)
        {
                printf("%c is in the level %d\n", p->data, level);
                TreeTravel(p->l, level + 1);
                TreeTravel(p->r, level + 1);
        }
       
}

int main()
{
        bitree *root=NULL;
        Create(root);
        TreeTravel(root, 1);

        system("PAUSE");
}
页: [1]
查看完整版本: 《数据结构与算法》——二叉树