trie树实际上是一种多叉树的应用,Trie树是用来解决,搜索引擎中,输入前缀可以给出提示词的非常好的解决方案

在实现trie书算法以前,我们先回顾温习下,多叉树的实现和遍历(对于我们trie树的实现和便利帮助很大),这里就不说普通二叉树,因为原理一样,但相对简单

下面是算法实现,这个算法参考了这本书中的描述和定义,用了一个很节省空间的结构定义

并没有在父节点中存储所有的子节点,而是存储了节点的链表,一般叫做二叉链表法,这样算法看起来非常像二叉树了

#include

#include

#define maxsize 100

typedef struct node

{

char *data;

struct node *first_child,*next_sibling;//fc是第一个孩子,nb是fc的临节点

} tree;

/**

a

/ \ \

b c d

/\ \

e f g

创建出来的树结构如上

*/

tree *insertTree(char *ch, tree *parent, tree *pre_sibling) {

tree *child = (tree *)malloc(sizeof(tree));

child->data = ch;

if (parent != NULL) parent->first_child = child;

if (pre_sibling != NULL) pre_sibling->next_sibling = child;

child->first_child = NULL;

child->next_sibling = NULL;

return child;

}

/**二叉链表创建树*/

tree *create() {

//创建root节点

tree *root = (tree *)malloc(sizeof(tree));

root->data = "A";

root->first_child = NULL;

root->next_sibling = NULL;

/**

* 创建多个子节点

**/

tree *b = insertTree("B", root, NULL);

tree *c = insertTree("C", NULL, b);

tree *g = insertTree("G", c, NULL);

//tree *h = insertTree("H", g, NULL);

tree *d = insertTree("D", NULL, c);

tree *e = insertTree("E", b, NULL);

tree *f = insertTree("F", NULL, e);

return root;

}

void preOrder(tree *root) {

printf("%c ",*root->data);

if (root->first_child != NULL) {

preOrder(root->first_child);

}

if (root->next_sibling != NULL) {

preOrder(root->next_sibling);

}

}

void postOrder(tree *root) {

if (root->first_child != NULL) {

postOrder(root->first_child);

}

printf("%c ",*root->data);

if (root->next_sibling != NULL) {

postOrder(root->next_sibling);

}

}

int main()

{

tree *root = create();

printf("先序遍历:");

preOrder(root);

printf("后序遍历:");

postOrder(root);

}

最终结果

先序遍历:A B E F C G D 后序遍历:E F B G C D A [Finished in 0.2s]

最后说一下数学之美中的一道题目,是按照层级遍历二叉树(当然可以推广到多叉树),这个以后再说吧,其实我一直在想如果数学之美中,这道题目不是限定的那么死,我们完全可以在数据结构上做文章,让这个问题变得很简单,就是在节点存储上同一层节点的链表,也算是借鉴了上面的一个结构描述

多叉树的前序遍历_多叉树的创建和遍历(为Trie树做准备)相关推荐

  1. 原生 遍历_迭代器模式统一集合的遍历方式

    今天来介绍迭代器模式(Iterator Design Pattern),它还有另一个名字,叫作游标模式(Cursor Design Pattern). 1,遍历集合元素 现在的高级语言(比如 C++, ...

  2. java实现二叉树广度优先遍历_二叉树之深度优先和广度优先遍历(Java)

    tree.png 1. 二叉树结构定义 public static class Tree { int data; Tree left; Tree right; public Tree(int data ...

  3. 螺旋遍历_螺旋形式的水平阶遍历

    螺旋遍历 Problem statement: 问题陈述: Write a program to print Level Order Traversal in spiral form of a bin ...

  4. 二叉树层级遍历_二叉树中的层级顺序遍历

    二叉树层级遍历 Level Order Traversal is one of the methods for traversing across a Binary Tree. In this art ...

  5. java的list遍历_【java】list集合遍历的5种方式

    平凡也就两个字: 懒和惰; 成功也就两个字: 苦和勤; 优秀也就两个字: 你和我. 跟着我从0学习JAVA.spring全家桶和linux运维等知识,带你从懵懂少年走向人生巅峰,迎娶白富美! 关注微信 ...

  6. C语言二叉树的创建与遍历

    二叉树的创建与遍历 文章目录 二叉树的创建与遍历 前言 一.二叉树的结构 二.二叉树创建和三种遍历 1. 2.前序遍历 3.中序遍历 4.后序遍历 5.测试代码 总结 前言 二叉树(binary tr ...

  7. 多叉树的前序遍历_二叉树的非递归遍历的思考

    封面图来自wikipedia 1 简介 二叉树的深度优先遍历(前序遍历.中序遍历.后序遍历)是一个比较基本的操作.如果使用递归的做法,很容易写出相应的程序:而如果使用非递归的做法,虽然也能写出相应的代 ...

  8. LeetCode Algorithm 589. N 叉树的前序遍历

    589. N 叉树的前序遍历 Ideas 二叉树的前序遍历模板,拿过来稍微一改就完事了. def preorderTraversalLoop(node):if not node:returnstack ...

  9. leetcode 589. N 叉树的前序遍历,590. N 叉树的后序遍历(Java版)

    589. N 叉树的前序遍历 https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/ 题解 import java.util.A ...

最新文章

  1. Odoo(OpenERP)配置文件详解
  2. 1 折限时团购!王牌讲师团年度精品课劲爆来袭​!
  3. eclipse 如何忽略js文件报错
  4. .net core针对async ()=的安全处理
  5. lambda ::_您无法从这里到达那里:Netlify Lambda和Firebase如何使我陷入无服务器的死胡同
  6. php 模拟登陆新浪微博,[Javascript] 爬虫 模拟新浪微博登陆
  7. 【安全热点】阿里巴巴月饼门,观点两极化,孰对孰错?
  8. 史上最全的launch的解析来啦,木有之一欧
  9. 成都链安xFootprint 2022 Web3 安全研报
  10. Ceres Solver:从入门到使用
  11. PHP如何启动scrapy,python,_新手Scrapy爬虫运行问题,python - phpStudy
  12. 石油化工行业智能供应链管理系统解决方案:数智化供应链平台推动企业转型智能化发展
  13. 2021BI及数据可视化领域最具商业合作价值企业盘点
  14. 曾经,被嫌弃的腾讯股权——读《腾讯传》
  15. 【SQLServer】用SQL语句更改数据库名,表名,列名
  16. UG编程-适合新手的详细讲解
  17. Redis 开机自启
  18. 数据库——sql修改主键
  19. 青岛企业邮箱怎么注册
  20. 原理 拉普拉斯金字塔_图像金字塔分层算法

热门文章

  1. Java中Lambda表达式的使用(转)
  2. 4-1 :input表单选择器 jQuery第四章 很关键 好像 刚好可以解决 微信自动回复...
  3. LeetCode Palindrome Linked List (回文链表)
  4. Android UI自定义Spinner下拉框(用popuwindow实现)-转
  5. bzoj1449 [JSOI2009]球队收益
  6. linux uname命令参数及用法详解--linux查看系统信息命令
  7. 万网域名注册查询接口(API)的说明
  8. Oracle拆分字符串,字符串分割的函数。
  9. 如何用Apache POI操作Excel文件-----如何用Apache POI 画一个离散图
  10. SSH2整合需要jar包解释