树形结构的3中搜索方式示例分享

 更新时间:2014年02月28日 10:13:49   作者:  
树的3中常见搜索方式,包括二叉树方式(每一层只有0和1)、满m叉树(每一层都有0 到m - 1)、子集树,也称为全排列树,需要的朋友可以参考下

复制代码 代码如下:

/**
树的3中常见搜索方式
1.二叉树方式(每一层只有0和1)
2.满m叉树(每一层都有0 到m - 1)
3.子集树,也称为全排列树
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>

using namespace std;

const int M = 20;

int n, m;
int ans[M];
//二叉树
void dfs_two(int cur){
 if(cur == n){
  for(int i = 0; i < n; i++){
   cout << ans[i] << " ";
  }
  cout << endl;
  return;
 }
 ans[cur] = 1;
 dfs_two(cur + 1);
 ans[cur] = 0;
 dfs_two(cur + 1);
}

//m叉树
void dfs_m(int cur){
 if(cur == n){
  for(int i = 0; i < n; i++){
   cout << ans[i] << " ";
  }
  cout << endl;
  return ;
 }
 for(int i =0; i < n; i++){
  ans[cur] = i;
  dfs_m(cur + 1);
 }
}
bool vis[M];
//子集树
void dfs_sub(int cur){
 if(cur == n){
  for(int i = 0; i < n; i++){
   cout << ans[i] << " ";
  }
  cout << endl;
  return;
 }
 for(int i = 0; i < n; i++){
  if(false == vis[i]){
   vis[i] = true;
   ans[cur] = i;
   dfs_sub(cur + 1);
   vis[i] = false;
  }
 }
}

int main(){

 n = 5;
 memset(ans, -1, sizeof(ans));
 memset(vis, false, sizeof(vis));
 dfs_two(0);//二叉树搜索
 dfs_m(0);//满m叉树搜索
 dfs_sub(0);//子集树搜索
 return 0;
}

相关文章

  • C++读写INI配置文件的类实例

    C++读写INI配置文件的类实例

    这篇文章主要介绍了C++读写INI配置文件的类,实例分析了C++操作ini配置文件的相关技巧,需要的朋友可以参考下
    2015-06-06
  • C++使用数组来实现哈夫曼树

    C++使用数组来实现哈夫曼树

    给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近
    2022-05-05
  • C++ LeetCode543题解二叉树直径

    C++ LeetCode543题解二叉树直径

    这篇文章主要为大家介绍了C++ LeetCode543题解二叉树直径,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++ 内存泄漏调试方式

    C++ 内存泄漏调试方式

    这篇文章主要介绍了C++ 内存泄漏调试方式,C++和其他高级语言不同,需要自行管理内存,项目大调用多,下文我们就来看看C++ 内存泄漏调试方式分享,需要的小伙伴可以参考一下
    2022-04-04
  • 6个变态的C语言Hello World程序

    6个变态的C语言Hello World程序

    这篇文章主要介绍了6个变态的C语言Hello World程序,需要的朋友可以参考下
    2016-05-05
  • C++实现LeetCode(202.快乐数)

    C++实现LeetCode(202.快乐数)

    这篇文章主要介绍了C++实现LeetCode(202.快乐数),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • C语言中反斜杠的作用及说明

    C语言中反斜杠的作用及说明

    这篇文章主要介绍了C语言中反斜杠的作用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • C/C++实现动态库动态加载

    C/C++实现动态库动态加载

    在很多项目中,我们多少会用到第三方动态库,这些动态库一般都是相对固定,使用也很简单,下面我们就来看看c/c++中如何实现动态库动态加载吧
    2024-01-01
  • C++直接cout指针名的含义?

    C++直接cout指针名的含义?

    今天小编就为大家分享一篇关于C++直接cout指针名的含义?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • C++使用泛型导致的膨胀问题

    C++使用泛型导致的膨胀问题

    这篇文章主要介绍了C++使用泛型导致的膨胀,智能家居主机的嵌入式平台上使用C++进行开发。FLASH存储空间有限,这是必须要考虑的因素,一定要重视,下面我们一起进入文章看看详细内容
    2021-11-11

最新评论