给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。 示例 1: 输入:root = [1,3,null,null,2]输出:[3,1,null,null,2]解释:3 不能是 1 左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。示例 2: 输入:root = [3,1,4,null,null,2]输出
21. 合并两个有序链表 解法一:迭代 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x,
系列文章目录 力扣热题刷题记录 文章目录 系列文章目录前言一、背景二、我的思路1.用栈记录数值2.头插法创建新的链表 总结 前言 每天进步一点点!!! 一、背景 来源:力扣 链接:https://leetcode-cn.com/problems/palindrome-linked-list/ 二、我的思路 1.用栈记录数值 栈是
#include <iostream> using namespace std; typedef struct ThBTNode { char data; ThBTNode *l_child; ThBTNode *r_child; int l_tag, r_tag; //l_tag=1表示指向前驱,l_tag=0表示指向左孩子 //r_tag=1表示指向后继,r_tag=0表示指向右孩子 } ThBTNo
反转链表 public: ListNode* reverseList(ListNode* head) { // 1. 递归终止条件 if (head == nullptr || head->next == nullptr) return head;//最后一个是p ListNode* p = reverseList(head->next); head->next->next = head; //head.nex
条件:无 题目:无 原理:无 代码: /** * Author: Moota * Copyright: Moota * Description: Written by Moota */ #include <iostream> #include <iomanip> #include <algorithm> //sort #include <map> #include <queue> #include <deque> /
这道题要求将给定的一个单链表重排,具体要求如下所示: 也就是说要求将原先的第一个结点后面接最后一个结点,然后接第二个结点,第二个结点后面接倒数第二个结点,以此类推。 这道题我一开始用暴力法解的,就是直接按照题目要求重排链表,可以做但是代码效率会比较低。这道题中要求的链
题目描述: 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。 示例1: 输入:ro
核心在于,如果一个节点的子节点的子节点都已经交换顺序了,那么就交换该节点的左右子节点。 #include<iostream> #include<queue> #include<vector> using namespace std; struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), l
思路 深度优先搜索 private: int res = 0; int dfs(TreeNode* cur) { if(cur == nullptr) { return 0; } if(cur->left != nullptr) { int leftSide = dfs(cur->left); } if(cur->right != nullptr) { int rightSide = dfs(cur->right);
本文的主要内容: 使用H.264编码对YUV视频进行压缩。如果是命令行的操作,非常简单。 ffmpeg -s 640x480 -pix_fmt yuv420p -i in.yuv -c:v libx264 out.h264 # -c:v libx264是指定使用libx264作为编码器 接下来主要讲解如何通过代码的方式使用H.264编码,用到avcodec、avutil两个库
Solution 1 这里面要求在既有链表结构上完成先序遍历的结构调整,也就是在调整过程中不改变树在先序遍历上的逻辑顺序,其实和 0094. Binary Tree Inorder Traversal 中的Morris遍历法在中序遍历上的思路一致,只需要修改遍历方法,以及最后的指针操作调整即可。 因为对右侧遍历不做
JNI 中创建对象数组 在上一篇中介绍了JNI中创建对象。本文是JNI系列的第十篇,介绍JNI中的如何调在Native代码中创建对象数组。 系列文章的大纲如下: JNI 简介JNI 基本类型JNI StringJNI 数组JNI 实例变量JNI 静态变量JNI 回调实例方法与静态方法JNI 调用Java中的super.method()
题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? 双指针法+辅助结点: AC代码 /** * Definition for singly-
题目链接:701. 二叉搜索树中的插入操作 思路:拿val与根结点值比大小,看从左走还是往右走 这是添加一个叶子结点的方法;原来的结点值不发生改变 一开始思路就想错了,我还以为原二叉树的结点值还有发生交换。 class Solution { public: TreeNode* insertIntoBST(TreeNode* root
/* * 往链表的末尾插入一个节点和在链表中查找某个节点并删除 */ #include<iostream> using namespace std; struct ListNode { int m_nValue; ListNode* m_pNext; }; //往一个链表的尾部添加一个节点 void AddToTail(ListNode ** pHead, int value) { ListNode* pNew = n
一、Leetcode-104:二叉树的最大深度 1.1 问题描述 1.2 问题分析 1.3 问题解决 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullp
题目: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 解题思路 先判断输入的链表是否为空的指针。如果第一个链表为空,则直接返回第二个链表;如果第二个链表为空,则直接返回第一个链表。如果两个链表都是空链表,合并的结果是得到一
#include <iostream> #include <queue> #include <functional> using namespace std; struct TreeNode { int value; TreeNode *left; TreeNode *right; TreeNode(int value, TreeNode *left, TreeNode *right) :value(value), left(le
双指针 判断是否有环 使用快慢指针, 分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。 2.找环的入口节点 从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个
思路:如果当前节点有左子树那么就将该节点左子树的右链接到该店的右边。 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullpt
有点难的题目,因为没有想到归并排序的思想。简单来说就是不断的对半分割,然后递归的完成两个分块的排序之后,再将这两个排好序的分块按序合并,就完成了排序。先贴一种自顶向下的方法。这种方法的细节之处在于不断的分割过程中,对只剩两个元素的情况进行处理,删去第二个元素,也就是将头结
链表(LinkedNode) 判断链表是否有环 哈希表: 将访问过的链表节点记录下来,如果该节点之前访问过,则直接返回有环,否则继续遍历 bool hasCycle(ListNode *head) { unordered_set<ListNode*> temp; while(head != nullptr){ if(temp.count(head)){ return true; } else[ t
用ffmpeg的时候我们有时候需要手动为AVFrame分配内存数据,目前有两种方式, 第一种: AVFrame *m_yuvFrame{nullptr}; uint8_t *m_outbuf{nullptr}; int m_outbuffSize{0}; m_yuvFrame = av_frame_alloc(); // allocate buffer to store decoded frame AVPixelFormat av_fmt
2021SC@SDUSC 老规矩,先贴上官方源码: 开源代码托管平台https://code.opensource.huaweicloud.com/HarmonyOS/OpenArkCompiler/file?ref=master&path=doc%252FDevelopment_Preparation.md 今天还是研究分析该编译器代码的bb部分本次研究的是cpp文件的下半部分。具体链接如下所示