实验室学习第二次总结

这是我在假期学习的第二次总结,也是我这两天的学习总结。

这两天我学习了上周的dfs算法以及二叉树的一些基本概念。

先说说dfs算法吧!
我看了这么一道题目:输入一个N,输出在1至N中数字选择的数字。
举个例子:N=2
输出:
12
1
2

上面的一个空也是输出。
这是一个简单的例子,但是很好的反映出了dfs的一个思想和原理。同时也更好反映出了在上一次的总结中所提出的观点。以下是代码:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=20;
int n;
int st[N];
void dfs(int x)
{
    if(x>n)
    {
        for(int i=1; i<=n; i++)
        {
            if(st[i]==1)
            {
                printf("%d",i);
            }
        }
        printf("\n");
        return ;

    }
    st[x]=1;
    dfs(x+1);
    st[x]=0;

    st[x]=2;
    dfs(x+1);
    st[x]=0;
}
int main()
{
    scanf("%d",&n);
    dfs(1);

    return 0;
}


可以很明显的看见,是使用了递归的方法。在代码中,程序是一步一步的去分析。比如说,我输入2,那么在算法中就会分析是输出1还是不输出,之后再分析2。并且第一次分析的两种情况是同时进行的

在选1和在选2的过程中都是同时进行的。当然,当数据过大的时候int是不够的,其数据大小可用2^N来计算。

而在今天学习二叉树的时候,也就可以发现,以上的图是一个“树”。

就像它一样,根据它我们也能够很简单地看出一些二叉树的特性。它像一棵倒着的树,由根不断地分支。知识点就不过多的赘述。
说一下它的特点:
1、根节点是没有父节点的。如上图中的1号。
2、满二叉树的节点数是2^h-1个,h是深度。
3、所有的父节点都要比子节点小。
挂一个一目了然的图

明天则深入的了解一些有关堆的算法方面的知识,选择性的去做一些题目。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值