• 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 ;
        }
    };


  • 相关阅读:
    Django 用ModelForm批量保存form表单(非常实用的方法) mfor_verity项目
    jquery ajax异步提交表单数据的方法
    python字符串转换成变量的几种方法
    django 线上线下使用不同的数据库 上线:mysql 线下sqlite3 以及debug模式的开和关
    django admin 或xdmin list_display search_fields list_filter 如果显示搜索外键或多对多字段
    nonce和timestamp在Http安全协议中的作用
    Web API接口 安全验证
    .Net环境下的缓存技术介绍
    .Net缓存管理框架CacheManager
    在asp.net web api中利用过滤器设置输出缓存
  • 原文地址:https://www.cnblogs.com/maskmtj/p/9390935.html
Copyright © 2020-2023  润新知