2020_12_22 LeetCode刷题

本文介绍N叉树的前序与后序遍历算法,并通过递归实现。同时探讨了如何根据二叉树结构创建字符串表示,提供了一种有效的方法来表示树结构。

589. N叉树的前序遍历

递归回溯题。前序遍历为根节点,左子树节点,右子树节点。

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<int> preorder(Node* root) {
        vector<int> ans;
        predfsTree(root,ans);
        return ans;
    }
    void predfsTree(Node* root,vector<int>& ans) {
        if(root == nullptr)
            return;
        ans.push_back(root->val);
        int len1 = root->children.size();
        for(int i = 0; i < len1; i++)
            predfsTree(root->children[i],ans);
    }
};

590. N叉树的后序遍历

递归回溯题。后序遍历的顺序为左子树节点,右子树节点,根节点。

/*
// Definition for a Node.
class Node {
public:
    int val;
    vector<Node*> children;

    Node() {}

    Node(int _val) {
        val = _val;
    }

    Node(int _val, vector<Node*> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
public:
    vector<int> postorder(Node* root) {
        vector<int> ans;
        postdfsTree(root,ans);
        return ans;
    }
    void postdfsTree(Node* root,vector<int>& ans) {
        if(root == nullptr)
            return;
        int len1 = root->children.size();
        for(int i = 0; i < len1; i++)
            postdfsTree(root->children[i],ans);
        ans.push_back(root->val);
    }
};

598. 范围求和 II

简单模拟题。初始化所有的数组元素都为0,之后给在范围内的数+1,那么最大元素的个数其实就是增加次数最多的范围内的点,也就是需要找出所有的区间中的最小区间,由于所有的区间初始点从0开始,那么也就只需要找出两个数值,一个m和一个n的最小值,然后相乘就是结果。注意初始化的数值。

class Solution {
public:
    int maxCount(int m, int n, vector<vector<int>>& ops) {
        int min1 = m,min2 = n;
        int len1 = ops.size();
        for(int i = 0; i < len1 ;i++) {
            min1 = min(min1,ops[i][0]);
            min2 = min(min2,ops[i][1]);
        }
        return min1 * min2;
    }
};

 

606. 根据二叉树创建字符串

递归回溯题。这道题目没有在15min内完成,之后看了题解。模拟面试写的时候只是单纯的在递归函数中添加左右扩号,合法性想在得出了结果后再返回处理吗但是处理过程不对,就是右节点为空的情况,因为判定的时候处理合法性写法是当出现左右括号相邻,所以放弃了想法。分为四种情况,然后分别单独考虑得出答案。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    string tree2str(TreeNode* t) {
        if(t == nullptr)
            return "";
        if(t->left == nullptr && t->right == nullptr)
            return to_string(t->val) + "";
        if(t->left != nullptr && t->right == nullptr)
            return to_string(t->val) + "(" + tree2str(t->left) +  ")";    
        return to_string(t->val) + "(" + tree2str(t->left) +  ")" + "(" + tree2str(t->right) +  ")";
    }
};

 

根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯和实时音视频整体解决方案,由北京野火无限网络科技有限公司维护和支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值