leetcode刷题(c++)_数据结构_2树

文章目录

  • 树必刷题
  • 准备知识
  • 题解
    • 1.递归
      • 1)树的高度
      • 2)平衡树


树必刷题

leetcode题解树:

  • 递归
    1.树的高度
    2.二叉平衡树
    3.两节点的最长路径
    4.翻转树
    5.归并两颗树
    6.判断路径和是否等于一个数
    7.统计路径和等于一个数的路径数量
    8.子树
    9.树的对称
    10.最小路径
    11.统计左叶子节点的和
    12.相同节点值的最大路径长度
    13.间隔遍历
    14.找出二叉树中的第二小的节点

  • 层次遍历
    1.一棵树每层节点的平均数
    2.得到左下角的节点

  • 前中后序遍历
    1.非递归实现二叉树的前序遍历
    2.非递归实现二叉树的后序遍历
    3.非递归实现二叉树的中序遍历

  • BST
    1.修剪二叉查找树
    2.寻找二叉查找树的第K个元素
    3.把二叉查找树每个节点的值都加上比它大的节点的值
    4.二叉查找树的最近公共祖先
    5.二叉树的最近公共祖先
    6.从有序数组中构造二叉查找树
    7.根据有序链表构造平衡的二叉查找树
    8.在二叉查找树中寻找两个节点,使他们和为一个给定值
    9.在二叉查找树种查找两个节点之差的最小绝对值
    10.寻找二叉查找树种出现次数最多的值

  • Trie
    1.实现一个Trie
    2.实现一个Trie,用来求前缀和

准备知识

  相关见https://blog.csdn.net/qq_48176859/article/details/109702477

题解

1.递归

  递归的思路在树种应用的颇为频繁,需要重点掌握。

1)树的高度

题意:
leetcode刷题(c++)_数据结构_2树_第1张图片
利用DFS的解法:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int maxDepth(TreeNode* root) {
        if(root==nullptr) return 0;
        else
        return 1+max(maxDepth(root->left),maxDepth(root->right));
    }
};

2)平衡树

题意:
leetcode刷题(c++)_数据结构_2树_第2张图片

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool isBalanced(TreeNode* root) {
        if(root==nullptr) return true;
        if(abs(getlength(root->left)-getlength(root->right))<=1){
            if(isBalanced(root->left) && isBalanced(root->right))  return true;
            else return false;
        }
        else return false; 
    }

    int getlength(TreeNode* root){
        if(root==nullptr) return 0;
        return 1+max(getlength(root->left),getlength(root->right));
    }
};

你可能感兴趣的:(leetcode刷题,leetcode,c++,数据结构)