zoukankan      html  css  js  c++  java
  • leetcode-剑指26-OK

    // language c
    // 剑指26
    // https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/
    // 绕了半天才搞出来,由于本人c基础薄弱,只能想出用链表来动态存储地址的低效存储方案,以后没事干可优化
    /**
    
    
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     struct TreeNode *left;
     *     struct TreeNode *right;
     * };
     */
    
     struct Node {
         struct TreeNode *address;
         struct Node *next;
     }Node;
    
    Node* makenode(){
        Node * one = (Node*)malloc(sizeof(Node));
        one->address = NULL;
        one->next = NULL;
    }
    
    void filladdress(Node* one,struct TreeNode* address){
        one->address = address;
    }
    
    void fillnext(Node* one,Node *next){
        one->next = next;
    }
    
    bool isSubStructure(struct TreeNode* A, struct TreeNode* B){
        if(B==NULL)
            return false;
    
        // 找到B的根在A中的位置的节点的地址,假设A中所有结点的值不同,假设错误,懒得改了,先快活快活,快活完了,继续
        // 此函数用于寻找
        Node *first = NULL;
        Node *temp;
        void findNode(struct TreeNode* root, int x){
            if(root == NULL)
                return;
            if(root->val == x){
                temp = makenode();
                filladdress(temp,root);
                fillnext(temp,first);
                first = temp;
                return;
            }
            struct TreeNode * left = findNode(root->left,x);
            struct TreeNode * right = findNode(root->right,x);
            if(left){
                temp = makenode();
                filladdress(temp,root);
                fillnext(temp,first);
                first = temp;
                return;
            }
            if(right){
                temp = makenode();
                filladdress(temp,root);
                fillnext(temp,first);
                first = temp;
                return;
            }
            return;
        }
    
        bool AbaohanB(struct TreeNode* A, struct TreeNode* B){
            if((A==NULL)&&(B==NULL))
                return true;
            if((A==NULL)||(B==NULL))
                return false;
            if(A->val != B->val)
                return false;
            bool left,right;
            if(B->left)
                left = AbaohanB(A->left,B->left);
            else
                left = true;
            if(B->right)
                right = AbaohanB(A->right,B->right);
            else right = true;
            if(left&&right)
                return true;
            return false;
        }
        
        struct TreeNode* C;
        findNode(A,B->val);
        temp = first;
        while(first){
            C = first->address;
            if(AbaohanB(A,C))
                return true;
            first = first->next;
        }
        free (temp);
        // 最后没找到就false;
        return false;
    }
    
  • 相关阅读:
    HTML iframe, 获取iframe子页面中的元素(基于JavaScript)
    微信小程序中引入VR全景图
    git创建分支,提交代码详细流程(保姆级)
    Vue项目中使用Axios封装http请求
    node搭建本地服务器后端解决跨域问题
    ant design Upload组件上传文件类型
    使用nodejs连接mysql数据库实现增删改查 连接Node.js时报错“Cannot GET /”
    后端返回文件流,前端处理进行文件下载
    JS判断是否是数组的四种做法
    Js常用方法:JS字符串截取、数组截取等
  • 原文地址:https://www.cnblogs.com/gallien/p/14337827.html
Copyright © 2011-2022 走看看