
二叉树与二分搜索树
数据结构---二叉树
(xsj)
模拟只会猜题意
贪心只能过样例
DP一般看规律
数论只会gcd
计算几何瞎暴力
图论只会匈牙利
数据结构没学过
字符串只能干输入
展开
-
力扣 173.二叉搜索树迭代器
题面题解(二叉树的非递归中序遍历)将整棵树的最左边的一条链压入栈中,每次取出栈顶元素,并记录,如果它有右子树,那么将右子树最左边压入压栈中代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nul原创 2021-04-17 11:13:51 · 182 阅读 · 0 评论 -
剑指 offer acwing 47 二叉树中和为某一值的路径
题面题解我们只需要遍历所有路径,然后求出符合的路径即可,注意每次递归完成后要还原状态代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Sol原创 2021-03-24 10:34:41 · 77 阅读 · 0 评论 -
剑指 offer acwing 46 二叉搜索树的后序遍历序列
题面题解对于二叉搜索树,我们知道,左子树的值都小于根节点,右子树的值都大于根节点,给出后序遍历,最后一个节点一定是根节点,然后从前向后,只要是小于根节点的点都是左子树中的,从前向后找第一个大于根节点的位置,就是右子树的开始,然后递归处理左右子树,看是否合法代码class Solution {public: bool dfs(vector<int> seq, int l, int r) { if (l >= r) return true;原创 2021-03-24 10:07:14 · 135 阅读 · 0 评论 -
剑指 offer acwing 45 之字形打印二叉树
题面题解和44题一样,在每层末尾加一个nullptr ,就可以实现分层 ,然后加一个计数器,当cnt为奇数时,直接放入res,当cnt为偶数时,将cur翻转,然后放入res代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), le原创 2021-03-23 23:12:23 · 112 阅读 · 0 评论 -
剑指 offer 44 分行从上往下打印二叉树
题面题解对于二叉树的层序遍历,我们直接用BFS优先队列即可,像上一题一样,但是这题让我们分层输出,这里有一个小技巧,我们可以在每层后边加一个nullptr8 nullptr 12 2 nullptr 6 nullptr 4 nullptr ,这样每次遍历到nullptr 都是一层结尾,具体看代码代码/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2021-03-23 22:32:21 · 76 阅读 · 0 评论 -
PTA L2-035 完全二叉树的层序遍历
题面题解完全二叉树采用顺序存储方式,如果有左孩子,则编号为2i,如果有右孩子,编号为2i+1,然后按照后序遍历的方式(左右根),进行输入,最后顺序输出即可。代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;const int N = 35;int n;原创 2021-03-23 17:46:53 · 793 阅读 · 0 评论 -
PTA L3-010 是否完全二叉搜索树
题面题解给定序列,我们建立一颗二叉搜索树,这里用数组存树(根节点为n,那么左儿子为2n,右儿子为2n+1),建树过程,我们每次从根节点开始遍历,遇到大于根节点的就向左递归,否则向右递归,同时我们更新maxn(用来记录最后一个节点所在数组的下标),这样一颗树就建好了对于层序遍历,我们直接按数组下标输出即可,判断是否为完全二叉树,我们只需要看前n个点是否在数组前n个位置即可代码#include<iostream>#include<cstdio>#inclu原创 2021-03-23 17:30:38 · 120 阅读 · 0 评论 -
PAT甲级真题 1064 完全二叉搜索树
题面题解对于二叉搜索树,它的中序遍历是有序的(从小到大),先排序再模拟中序遍历将逐个结果填进去即可的得到层序遍历结果完全二叉排序树可以只用一个一维数组来存储,下标从 1开始左孩子为 2n 右孩子为 2n+1 (若存在)代码#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using nam原创 2021-03-23 16:16:36 · 225 阅读 · 0 评论 -
PAT甲级真题1110 完全二叉树
题面题解我们用两个数组 l,r 分别存储 第 i 号根节点的左右儿子 ,在读取的时候标记其有没有父节点,然后就可以找出其父节点。然后我们可以从根节点开始遍历,如果是完全二叉树,那么最后一个节点的编号一定等于节点数,可以看图中蓝色部分,我们只需要用一个maxn记录dfs过程中最大值,最后判断一下与n的关系即可代码#include<iostream>#include<cstdio>#include<string>#include<cstrin原创 2021-03-23 11:33:22 · 135 阅读 · 0 评论 -
PAT甲级真题1020 树的遍历
题面题解根据前序/后序 和 中序 遍历结果,我们都可以还原这颗二叉树,因为前序(根左右),中序(左根右),后序(左右根),我们根据树根所在的位置,就可以得出树的左右儿子,只要递归处理,我们就可以还原整颗树 ,注意的是区间的边界问题,可以直接列出数字来确定,这样不容易出错当建树完成后,我们只需要从根节点进行BFS就可以实现层序遍历代码#include<iostream>#include<cstdio>#include<string>#inc原创 2021-03-23 10:53:11 · 177 阅读 · 0 评论 -
剑指 offer acwing 39 对称的二叉树
题面题解对于一颗对称的二叉树,除去根节点,所有的子树都是相对称的,就是左子树的左儿子等于右子树的右儿子,左子树的右儿子等于右子树的左儿子,直接递归dfs判断即可代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NUL原创 2021-03-21 09:19:11 · 85 阅读 · 0 评论 -
剑指 offer acwing 18 重建二叉树(DFS)
题面题解前置知识 :遍历方式是根据 根节点 的位置分类的 ,前序遍历(根左右)中序遍历(左根右) 后序遍历(左右根),对于树的层次遍历 ,就是按找BFS的方式遍历,在每个叶子节点后加一个NULL (如图中方式)给定前序和中序,我们就可以dfs递归确定一颗树,就拿图中样例来看,首先前序(根左右),那么3肯定是根节点,那么看中序遍历的3所在位置,因为中序遍历是左根右,所以3之前的9是左子树 ,3之后的 15 20 7 是右子树右子树的前序遍历第一个是20 ,那么20就是右子树的根节原创 2021-03-16 16:36:14 · 153 阅读 · 0 评论 -
剑指 offer acwing 19 二叉树的下一个节点 (找后继)
题面题解在二叉树中一个节点的后继 :后继就是严格大于这个节点值得最小值中序遍历 :A C B D F H E M G 其实中序遍历的顺序中,每个节点的下一节点就是其后续节点,前一个节点就是其前驱节点。如果当前节点有右儿子,那么右子树中最左侧得节点就是当前节点的后继。比如F的后继是H如果当前节点没有右儿子,则需要沿着father一直向上找,找到第一个是father左儿子的节点,该节点的father就是当前节点的后继。比如当前节点是D,则第一个满足是其father左儿子的节点原创 2021-03-16 16:56:14 · 95 阅读 · 0 评论 -
剑指 offer acwing 38 二叉树的镜像
题面题面我们观察可以发现:所有子节点都交换了位置,所以我们只需要从根节点开始递归,然后交换根节点的左右儿子即可代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * };原创 2021-03-21 00:14:27 · 93 阅读 · 0 评论