树
Wade_Gao
这个作者很懒,什么都没留下…
展开
-
浙大版《数据结构(第2版)》题目集习题4.5 顺序存储的二叉树的最近的公共祖先问题 (25分)
二、解题思路这个题利用了二叉树孩子结点和其父节点下标的索引关系:若顺序树的索引从1开始,那么子节点的索引除以二就是其父节点的索引,注意一定是要使得树的索引从1开始才有这个性质三、解题代码#include <iostream>#include <vector>using namespace std;int main(){ int n; cin >> n; auto T = new int[n]; if(!T) exit(0)..原创 2020-07-13 18:05:01 · 245 阅读 · 0 评论 -
LeetCode-297: 二叉树的序列化与反序列化
class Codec{public: // Encodes a tree to a single string. string serialize(TreeNode *root) { if (!root) return ""; vector<TreeNode *> vec; string ret = "["; queue<TreeNode *> que; .原创 2020-05-14 11:26:03 · 158 阅读 · 0 评论 -
LeetCode-173: 二叉搜索树迭代器
First. Problem’s DescriptionSecond. Problem’s SolutionBST has a non-decreasing inorder-traversing series. We can use a list to store the nodes and where we call next(), we delete the beginning node in the list.Three. Code For Solutionclass BSTIterator原创 2020-05-12 22:16:33 · 176 阅读 · 0 评论 -
LeetCode-572:另一个树的子树
一、题目描述二、解题思路采用递归来解决:如果一个树是另一个树的子树,那么:主树和子树为同一棵树子树是主树的左子树的子树子树是主树的右子树的子树那么我们可以得到如下代码:class Solution {private: bool isSametree(TreeNode* s, TreeNode* t) { if(!s && !t) retu...原创 2020-05-07 01:48:08 · 146 阅读 · 0 评论 -
LeetCode-606:根据二叉树创建字符串
一、题目描述二、解题思路递归进行,首先加入当前传入的头节点,然后如果左子树不空,sln加上被括号包围的左子树返回结果,否则sln加上一对空括号;如果右子树不空,sln加上被括号包围的右子树返回结果。to_string(T val):将数值转化为字符串。返回对应的字符串。函数原型string to_string (int val);string to_string (long v...原创 2020-05-02 16:27:56 · 140 阅读 · 0 评论 -
LeetCode-面试题 04.05: 合法二叉搜索树
First: Problem’s DescriptionSecond: Problem’s SolutionThe sequence created when traversing the BST by the method of inorder is a non decreasing sequence. And if the BST is empty, we should return t...原创 2020-04-30 17:51:40 · 178 阅读 · 0 评论 -
剑指Offer-68:二叉树的最近公共祖先
一、题目描述二、解题思路这是剑指Offer的最后一道题,本质是二叉树的后序遍历(非递归)。牢牢记住二叉树的后序遍历以非递归形式遍历到某一节点时,辅助栈内保存的元素即为根节点到该节点的路径。知道了上面的性质后,我们就可以利用这两个性质来做题创建三个栈:遍历栈s,保存pp的路径的栈sp和保存qq的路径的栈sq遍历到当前节点时,调用拷贝构造函数,把遍历栈s拷贝给sp或sq当两个待查找节点...原创 2020-04-25 02:23:57 · 134 阅读 · 0 评论 -
LeetCode-337:打家劫舍 III
一、题目描述二、解题思路错误思路:刚开始我以为只要隔层相加取最大就行了,但是不是这么回事,因为[1, 2, null, 2, 5]应该返回1 + 5 = 6,隔层只相加一部分是完全有可能的正确思路假设从root节点开始如果抢劫了root节点,那么一定不可能抢劫root->left和root->right,只能是抢劫完root之后继续抢劫root->left和ro...原创 2020-04-21 13:36:16 · 112 阅读 · 0 评论 -
LeetCode-230:二叉搜索树中第K小的元素
一、题目描述二、解题思路题目不难,记住二叉搜索树的中序遍历是递增序列即可,不过以前并没有接触过三、解题代码class Solution {public: int kthSmallest(TreeNode* root, int k) { if(!root) return INT_MIN; int num = 0; stack&l...原创 2020-04-10 15:13:29 · 74 阅读 · 0 评论 -
LeetCode-106:从中序与后序遍历序列构造二叉树
一、题目描述二、解题思路我写过一篇从前序和中序遍历序列构造二叉树的文章,和这道题的思路是一模一样的三、解题代码class Solution {public: TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { if(!postorder.s...原创 2020-04-10 14:57:40 · 87 阅读 · 0 评论 -
LeetCode-105:从前序与中序遍历序列构造二叉树
一、题目描述二、解题思路先修概念这道题只能用递归来做,重点是怎么在两个序列里确定左右子树的区间由上一步的思路,这两个区间需要用户去指定前序遍历:NLR;中序遍历:LNR递归前的准备工作首先,给定的前序遍历的区间段,我们可以知道当前正在创建的子树的头结点:前序遍历区间最左的元素其次,我们需要找到这个元素为于中序遍历区间的何处:从中序遍历区间最左遍历到区间最右,相等证明找到...原创 2020-04-10 14:39:16 · 114 阅读 · 0 评论 -
LeetCode-103:二叉树的锯齿形层次遍历
一、题目描述class Solution {public: vector<vector<int>> zigzagLevelOrder(TreeNode* root) { vector<vector<int>> sln; if(!root) return sln; queue<Tr...原创 2020-04-07 23:12:19 · 111 阅读 · 0 评论 -
LeetCode-104:二叉树的最大深度
一、题目描述二、解题思路递归查找如果当前节点是空节点,那么返回0,同时也作为函数的递归出口否则,返回1 + max(left, right)非递归查找应用二叉树的后序遍历:当遍历到当前节点时,栈内的节点刚好就是当前节点的父节点.三、解题代码递归class Solution {public: int maxDepth(TreeNode* root) ...原创 2020-04-07 22:53:59 · 83 阅读 · 0 评论 -
LeetCode-1038:从二叉搜索树到最大和树
一、题目描述二、解题思路二叉搜索树的中序遍历是递增序列我们可以首先中序遍历二叉搜索树,将数字存入vector新树的值为从vector末尾开始,为从末尾元素到当前的元素sum二叉搜索树的反中序遍历是递减序列反中序遍历二叉搜索树,当前元素等于当前的sum三、解题代码中序遍历解法class Solution {public: TreeNode* bstT...原创 2020-04-06 09:42:03 · 142 阅读 · 0 评论 -
LeetCode-199. 二叉树的右视图
一、题目描述二、解题方法显然采用层次遍历,所谓右视图,也就是每一层的最后一个节点。每次进入循环,记录一下队列中的数据个数,最后一个数据便是本层最后一个节点class Solution {public: vector<int> rightSideView(TreeNode* root) { vector<int> sln; ...原创 2020-04-03 16:01:51 · 87 阅读 · 0 评论 -
LeetCode-107:二叉树的层次遍历II
一、题目描述给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回其自底向上的层次遍历为:[ [15,7], [9,20], [3]]二、解题方法这是一系列...原创 2020-04-02 18:02:25 · 103 阅读 · 0 评论