《剑指offer》树专题 (牛客10.25)】的更多相关文章

考察的知识点主要在于树的数据结构(BST,AVL).遍历方式(前序,中序,后序,层次).遍历算法(DFS,BFS,回溯)以及遍历时借助的数据结构如队列和栈.由于树本身就是一个递归定义的结构,所以在递归求解问题时,要善于将问题转化成合适的子问题,思考清楚子问题的形式.递归的出口.父问题与子问题的联系. 以下这些问题难度都不太大,很多都是一次过,比上次链表专题的思维难度小多了. 难度 题目 知识点 04. 重建二叉树 依据前序和中序遍历重建 递归 ★★ 17. 树的子结构 递归 18. 二叉树的镜像…
目录 Q13 调整数组顺序使奇数位于偶数前 Q14 链表中倒数第k个结点 Q15 反转链表 Q16 合并两个有序链表 Q17 树的子结构 Q18 二叉树的镜像 Q13 调整数组顺序使奇数位于偶数前 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 方法1:新开数组,先添加奇数,再添加偶数.代码略. 方法2: /** * 1.要想保证原有次序,则只能顺次移动或相邻交换. * 2.…
目录 T1 二维部分有序数组查找 ☆ T2 字符串字符不等长替换 - 从后往前 T3 返回链表的反序 vector T4 重建二叉树 T5 两个栈模拟队列 T6 旋转数组中的最小元素 - 二分或暴力 ☆ T7 - 10 斐波那契数列 - 递推递归 - 两变量写法 T11 二进制中 1 的个数 T12 数值的整数次方 - 缜密 - 基数可能为负数 T1 二维部分有序数组查找 ☆ 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完…
版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: 一般对于树的操作不像链表一样,操作更复杂,如果使用循环遍历的话,对于非完全二叉树规律难寻,一般通用的方法就是使用递归求解,本题也不例外,同样使用递归求解,求解的大体思路是首先判断B的根节点和A的根节点是否相同(这里的相同是指节点的值相同并且左右子节点相同),如果相同比较他们的左右子节点,这一步骤是…
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 牛客网链接 js代码 /* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function HasSubtree(pRoot1, pRoot2) { // write code here if (!pRoot1 || !pRoot2) return false return isSub…
目录 // Q01 二维部分有序数组查找 [善用性质] // Q06 旋转数组中的最小元素 [二分 || 暴力] Q13 调整数组顺序使奇数位于偶数前 / Q19 顺时针打印矩阵 [使用边界变量] / Q28 找出数组中出现超过一半的数字 方法 1:HashMap统计各数字出现次数 方法 2:基于Partition查找第K大 O(n) 方法 3:遍历判断,两两相消 / Q30 连续子数组的最大和 [dp ,Math.max()] / Q32 把数组排成最小的数[Collections.sort(…
难度 题目 知识点 03. 返回链表的反序 vector 递归,C++ STL reverse() * 14. 链表中倒数第k个结点 指针操作 15. 反转链表 头插法,递归 16. 合并两个有序链表 指针操作 *** 25. 复杂链表的复制 深度复制 * 36. 两个链表的第一个公共结点 栈辅助,链表拼接,链表截取 *** 55. 链表中环的入口结点 断链法,快慢指针 * 56. 删除链表中重复的结点 指针操作 03. 返回链表的反序 vector 输入一个链表,按链表从尾到头的顺序返回一个A…
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)     思路: 分为2个部分.1先找出A中和B根节点相同的节点r. 2,咱判断B中所有孩子节点是不是和A一样.介绍条件是B遍历完,返回true,如果A遍历完了,B还是没结束,返回false:   AC代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :…
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 分析: 先匹配到A的某个结点和B的根相同,然后往下继续匹配.不匹配则递归匹配左右子树. 代码: /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution…
题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 第一遍没写出来错误点:认为首先应该找到pRoot1等于pRoot2的节点,但是递归就是自己在不断递归中寻找相等的节点的.判断是否相等可以完全放到另外一个函数中进行判断.主函数主要就是看结果,比较相等可以完全放到另外一个函数中去. /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeN…