随笔分类 - 【数据结构与算法】二叉树
摘要:序列化其实就是二叉树遍历,根据特定的要求按照要求格式输出就行反序列化跟序列化对应上,一般来讲只知道某一个遍历的序列是无法还原二叉树的,但是题目给出的序列带有nullptr空指针,所以是可以的 中序遍历是无法反序列化的,因为不知道根节点的具体索引 前序、后序、层序都可以进行反序列化,以下给出了前序遍历
阅读全文
摘要:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), r
阅读全文
摘要:/******************************************/ 二叉树的问题,一定要明白到底应该深度优先(前中后序)还是广度优先(层序遍历) 最基本的遍历方式:深度优先和广度优先 深度优先:前、中、后序(递归法和迭代法均可) 广度优先:层次遍历(迭代法) 栈其实就是递归的一
阅读全文
摘要:如果给定一棵二叉树,要找到二叉树中的所有众数(出现频率最高的元素)。 一、普通二叉树的众数 要统计出现的次数,一般使用到的是map中的unordered_map,因为不需要有序,也不需要有重复的元素,其key值一般是元素的值,value一般是元素出现的次数,这个只要遍历一遍二叉树就能得到unorde
阅读全文
摘要:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), r
阅读全文
摘要:二叉树的问题,一定要明白到底应该深度优先(前中后序)还是广度优先(层序遍历) 最基本的遍历方式:深度优先和广度优先 深度优先:前、中、后序(递归法和迭代法均可) 广度优先:层次遍历(迭代法) 栈其实就是递归的一种实现结构,也就是说前中后序遍历的逻辑其实都是可以借助栈使用非递归的方式来实现的; 广度优
阅读全文
摘要:一、普通二叉树的公共祖先问题 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x)
阅读全文
摘要:对于让你求二叉树节点个数的题目,无非就是普通二叉树、完全二叉树、满二叉树三种。这三者的关系是,二叉树>完全二叉树>满二叉树。 如果是题目没有给限定条件,只让你求二叉树的节点个数,则按照普通二叉树来求;如果给了限定条件,完全二叉树或者满二叉树,则根据他们的特性有更优化的算法。 一、求普通二叉树的节点个
阅读全文
摘要:简单查找的时间复杂度为O(n) 二分查找的时间复杂度为O(logn) 用递归实现二分查找: 基线条件:数组只包含一个元素。如果如果要查找的值与这个元素相同,就找到了;否则说明不在数组中。 递归条件:把数组分成两半,将其中一半丢弃,并对另一半执行二分查找。 C++代码实现如下(VS可以直接运行): #
阅读全文