首页 > 其他分享 >LeetCode二叉树小题目

LeetCode二叉树小题目

时间:2023-11-24 16:33:33浏览次数:33  
标签:right 路径 mid 小题目 二叉树 path root LeetCode left

Q1将有序数组转换为二叉搜索树

file

题目大致意思就是从一个数组建立平衡的二叉搜索树。由于数组以及进行了升序处理,我们只要考虑好怎么做到平衡的。平衡意味着左右子树的高度差不能大于1。由此我们可以想着是否能用类似二分+递归来解决。

  • 如果left>right,直接返回nullpter

  • 否则 mid = (left + right) / 2,将a[mid]值赋给root结点

  • 递归左子树 right = mid-1;

  • 递归右子树left = mid+1;

这样一来问题就得到了解决。

class Solution {
public:

    TreeNode* sortedArrayToBST(vector<int>& nums) {
        return build(nums,0,nums.size() - 1);
    }
    TreeNode*build(vector<int>&nums,int left,int right)
    {
        if(left > right)
            return nullptr;
        int mid = (left + right) / 2;
        TreeNode*root = new TreeNode(nums[mid]);
        root->left = build(nums,left,mid-1);
        root->right = build(nums,mid+1,right);
        return root; 
    }
};

Q2路径总和

file
本题是经典的搜索回溯+路径记录的题目。

路径记录:

  • 先序进行递归遍历,进行路径更新

  • 如果当前sum = root->val,将次路径添加到答案中

搜索回溯:

  • 递推参数: 当前节点 root ,当前目标值 tar

  • 终止条件: 若节点 root 为空,则直接返回。

  • 递推工作:

  • 路径更新: 将当前节点值 root.val 加入路径 path 。

  • 目标值更新: tar = tar - root.val(即目标值 tar 从 targetSum 减至 0 )

  • 路径记录: 当 (1) root 为叶节点 且 (2) 路径和等于目标值 ,则将此路径 path 加入 res 。

  • 先序遍历: 递归左 / 右子节点。

  • 路径恢复: 向上回溯前,需要将当前节点从路径 path 中删除,即执行 path.pop_back() 。

class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    void dfs(TreeNode*root,int targetSum)
    {
        if(root==nullptr)return;
        path.push_back(root->val);
        if(root->left == nullptr && root->right == nullptr)
        {
            if(targetSum == root->val)
                ret.push_back(path);
        }
        dfs(root->left,targetSum-root->val);
        dfs(root->right,targetSum-root->val);
        path.pop_back();
    }
    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
       dfs(root,targetSum);
       return ret;
    }
};

本文由博客一文多发平台 OpenWrite 发布!

标签:right,路径,mid,小题目,二叉树,path,root,LeetCode,left
From: https://www.cnblogs.com/xiaocrblog/p/17854062.html

相关文章

  • 代码随想训练营第四十一天(Python)| 不同的二叉树搜索树
    96.不同的二叉搜索树1、关键点找出状态转移方程classSolution:defnumTrees(self,n:int)->int:#创建dp数组,dp[i]代表节点数为i的二叉搜索树数量dp=[0]*(n+1)#初始化数组dp[0]=1#遍历每个元素作为根节点......
  • [LeetCode] 1630. Arithmetic Subarrays
    Asequenceofnumbersiscalledarithmeticifitconsistsofatleasttwoelements,andthedifferencebetweeneverytwoconsecutiveelementsisthesame.Moreformally,asequencesisarithmeticifandonlyifs[i+1]-s[i]==s[1]-s[0]forallvalid......
  • 二叉树
    二叉树的遍历点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=150;intparent[N];intchild[N][2];voiddfs1(intu){ cout<<u<<''; if(child[u][0])dfs1(child[u][0]); if(child[u][1])dfs1(child[u][1]);}voiddfs2(i......
  • LeetCode之二叉树
    发现新天地,欢迎访问Cr不是铬的个人网站平衡二叉树做这一道题目我们要考虑到平衡二叉树的定义。也就是一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。关于一个结点的高度计算我们很容易用递归得出,那么我们用递归遍历加上这个判断条件即可.classSolution{pu......
  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......
  • LeetCode-Java:88合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1......
  • 数据结构之二叉树的遍历3(java)
    一:概述绝大多数的可以用递归解决问题,也可以使用另一种数据结构来解决,这种数据结构就是栈。因为递归和栈都有回溯的特性。二:具体说明如何借助栈来实现二叉树的遍历,下面以二叉树的前序遍历为例,来阐述具体过程。<1>首先遍历二叉树的根节点1,放入栈中。<2>遍历根节点1的左孩子节点2,放入......
  • leetcode324场周赛
    一、使三个字符串相等给你三个字符串s1、s2和s3。你可以根据需要对这三个字符串执行以下操作任意次数。在每次操作中,你可以选择其中一个长度至少为2的字符串并删除其最右位置上的字符。如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的最小操作次数......
  • [LeetCode] 1361. Validate Binary Tree Nodes 验证二叉树
    Youhave n binarytreenodesnumberedfrom 0 to n-1 wherenode i hastwochildren leftChild[i] and rightChild[i],return true ifandonlyif all thegivennodesform exactlyone validbinarytree.Ifnode i hasnoleftchildthen leftCh......
  • 【11月LeetCode组队打卡】Task2--TrieTree
    字典树Trie音同try,又称前缀树,是一颗有根树,根节点到树节点的一个路径就代表一个单词,多用于关键词检索,自动补完和拼写检查用空间换时间:借公共前缀来降低查询时间的开销根节点无内容(参考:字典树TrieTree图文详解——CSDN实现Trie题解——力扣)208.实现Trie复习一下this......