• c++刷题(30/100)


    题目一:合并两个排序的链表

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

    思路:利用两个指针cur1,cur2来指分别向两个链表中当前较小的和当前较大的节点,若cur1->val>cur2->val,那么就将两者交换

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
                val(x), next(NULL) {
        }
    };*/
    class Solution {
    public:
        ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
        {
            ListNode* pre = NULL;
            ListNode* next = NULL;
            if(pHead1==NULL||pHead2==NULL){
                return pHead1!=NULL ? pHead1 : pHead2 ;
            }
            ListNode* head = pHead1->val<pHead2->val ? pHead1 : pHead2 ;
            ListNode* cur1 = head==pHead1? pHead1 : pHead2 ;
            ListNode* cur2 = head==pHead1? pHead2 : pHead1 ;
            while(cur1!=NULL&&cur2!=NULL){
                if(cur1->val<=cur2->val){
                    pre = cur1 ;
                    cur1 = cur1->next ;
                }else{
                    next = cur1 ;
                    pre->next = cur2 ;
                    pre = cur2 ;
                    cur1 = cur2 ;
                    cur2 = next ;
                }
            }
            pre->next = cur1!=NULL? cur1 : cur2 ;
            return head ;
        }
    };

    题目二:树的子结构

    输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

    思路:判断B是A的子结构,所以每次判断都是判断A的某个节点subA和B的根节点开始是否能找到一个相等的树,这个相等是有条件的,当B的节点遍历到空的时候,如果subA不为空,那么也算是相等。

    所以写一个判断是否“相等”的函数,然后让A的每个节点都和B的根节点带入这个函数比较就行了

    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        bool isEqual(TreeNode* pRoot1, TreeNode* pRoot2){
            if(pRoot2==NULL) return true ;
            if(pRoot1==NULL) return false ;
            if(pRoot1->val!=pRoot2->val) return false ;
            if(isEqual(pRoot1->left,pRoot2->left)&&isEqual(pRoot1->right,pRoot2->right)) return true ;
            return false ;
        }
        bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
        {
            if(pRoot2==NULL||pRoot1==NULL) return false ;
            if(isEqual(pRoot1,pRoot2)) return true ;
            return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2) ;
        }
    };

    题目三:二叉树镜像

    操作给定的二叉树,将其变换为源二叉树的镜像。

    输入描述:

    二叉树的镜像定义:源二叉树 
        	    8
        	   /  
        	  6   10
        	 /   / 
        	5  7 9 11
        	镜像二叉树
        	    8
        	   /  
        	  10   6
        	 /   / 
        	11 9 7  5
    思路:就是简单的左右孩子互换,递归实现就好了
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        void Mirror(TreeNode *pRoot) {
            if(pRoot==NULL) return ;
            Mirror(pRoot->left) ;
            Mirror(pRoot->right) ;
            TreeNode *temp = pRoot->left ;
            pRoot->left = pRoot->right ;
            pRoot->right = temp ;
        }
    };


  • 相关阅读:
    负载均衡
    nginx 负载均衡
    linux crontab 定时任务
    linux各种查看端口号
    MYSQL集群
    linux ntp时间同步
    【推荐】开源项目ElasticAmbari助力 ElasticSearch、Kibana、ambari服务高效运维管理
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    对于 评论 发送,出现网络延迟、响应慢,用户多次点击发送按钮,怎么解决只生成一次数据存入DB
    第三方授权登录
  • 原文地址:https://www.cnblogs.com/maskmtj/p/9390935.html
Copyright © 2020-2023  润新知