一、二叉树的深度优先遍历 对于一颗二叉树,深度优先搜索(Depth First Search)是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。 那么深度遍历有重要的三种方法。这三种方式常被用于访问树的节点,它们之间的不同在于访问每个节点的次序不同。这三种遍历分别叫做先序遍历(preorder_t ...
分类:
编程语言 时间:
2020-07-04 01:10:49
阅读次数:
70
#include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiNode{//二叉树 ElemType data; struct BiNode *lchild,*rchlid; }BiNode,*BiTre ...
分类:
编程语言 时间:
2020-07-04 01:05:11
阅读次数:
74
// 实验存档 问题描述 有如下LL(1)文法 (1)E->TG (2)G->+TG|-TG (3)G->ε (4)T->FS (5)S->*FS|/FS (6)S->ε (7)F->(E) (8)F->i E为开始符号,实现一个非递归的预测分析器。 解决思路 1、根据以上文法,可知: 非终结符有E ...
分类:
其他好文 时间:
2020-07-02 20:10:09
阅读次数:
66
非递归解法 递归解法比较简单,是考察概念,放在文章末尾来说。 用递归方法能解决的问题都能用非递归方法来实现,因为递归方法无非就是用函数栈来保存信息,如果用自己申请的数据结构来代替函数栈,也可以实现一样的功能 步骤: 1.申请一个栈,将头节点head压入栈中 2.从stack中弹出结点,记为temp, ...
分类:
其他好文 时间:
2020-06-30 00:41:42
阅读次数:
57
根据自己对于对于遍历的理解 前序遍历:中左右 中序遍历:左中右 后序遍历:左右中 对于前序和中序,可以只改变一些printf的顺序 所以前中后名称都是针对中间(根)的结点,所以后序遍历是不可以直接移动printf的位置的,因为对于每个结点不能直接出栈,出栈输出的时候需要判断2点 1.这个节点有没有右 ...
分类:
其他好文 时间:
2020-06-28 22:34:15
阅读次数:
72
1. 题目 给定一棵二叉树的头节点head,完成二叉树的先序、中序和后序遍历。要求时间复杂度为O(N),额外空间复杂度为O(1) 2. 思路 常规的遍历二叉树的思路是递归和非递归的解法,但是这两种解法都不能做到额外空间复杂度为O(1)。 首先来看普通的递归和非递归解法,导致它们空间复杂度高的原因是使 ...
分类:
其他好文 时间:
2020-06-25 23:51:14
阅读次数:
123
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 非递归(迭代): 简单的归并 1 class Solution { 2 // 简单的归并 ...
分类:
其他好文 时间:
2020-06-14 20:42:02
阅读次数:
61
时间久了,有些遗忘,回顾记录一下: 快速排序: 顾名思义,对于c++,快速排序历史上一直是实践中已知最快的泛型排序算法,平均运行时间:O(n*logn),最差就是O(n^2)。 STL中的sort用的就是快排,只不过根据数据量级穿插了别的如插入排序,堆排等算法,进行动态调整,使性能达到最优解。一般来 ...
分类:
其他好文 时间:
2020-06-12 14:55:40
阅读次数:
58
非递归遍历二叉树借用List实现的,具体实现方法如下。前序遍历非递归代码实现:publicList<Integer>preOrder(TreeNoderoot){List<Integer>list=newArrayList<>();if(root==null){returnlist;}list.add(root.val);//根据前序遍历的特性,先将根节点的值加
分类:
其他好文 时间:
2020-06-09 09:17:36
阅读次数:
64
总所周知,尾递归是一种特殊的递归;因为这一次递归返回的下一次的结果,所以避免了递归栈,对于空间上来讲是一种节省。 所有的递归都有非递归来书写,尾递归也可以达到和非递归相同的结果。 但是python是不支持尾递归的,因为要返回错误栈和错误类型。 python 默认的递归栈大小可以通过以下获得 sys. ...
分类:
其他好文 时间:
2020-06-08 00:41:28
阅读次数:
58