zoukankan      html  css  js  c++  java
  • Leetcode 递归题

    24. 两两交换链表中的节点

    题目描述:


    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
    
    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
    
     
    
    示例:
    
    给定 1->2->3->4, 你应该返回 2->1->4->3.
    
    

    思路分析:

    1.链表和树的结构很适合递归,可以往这方面去想。
    2.递归首先先想着结束的条件是啥。
    3.之后本级递归需要返回什么。
    4.抱着以上两点,看注释
    

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* swapPairs(ListNode* head) {
            if(head==NULL||head->next==NULL)//当链表为空或者只有一个元素
            {
                return head;
            }
            ListNode* next=head->next; //核心就拆成了一个head,一个head->next,和一个已经排好序的链表之间的交换
            head->next=swapPairs(head->next->next);
            next->next=head;
            return next; //返回已经排好序的链表
        }
    };
    

    226. 翻转二叉树


    题目描述:

    翻转一棵二叉树。
    

    思路分析:

    1.当head为空的时候,返回
    2.交换节点,左右节点交换
    3.返回翻转后的头结点
    

    /**
     * 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:
        TreeNode* invertTree(TreeNode* root) {
            if(!root)
            {
                return root;
            }
            TreeNode* treeleft=invertTree(root->left);
            TreeNode* treerigth=invertTree(root->right);
            root->right=treeleft;
            root->left=treerigth;
            return root;
    
        }
    };
    

    101. 对称二叉树


    题目描述:


     
      给定一个二叉树,检查它是否是镜像对称的。
    
    例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
     1
       / 
      2   2
     /  / 
    3  4 4  3
    但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
    
        1
       / 
      2   2
          
       3    3
    
    
    

    /**
     * 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:
        bool isSymmetric(TreeNode* root) {
            if(!root) return true;
            return judge(root->left,root->right);
    
            
        }
        bool judge(TreeNode* p,TreeNode* q)
        {
            if(p==NULL&&q==NULL)return true;
            if(p==NULL||q==NULL)return false;
            if(p->val==q->val&&judge(p->left,q->right)&&judge(p->right,q->left))
            {
                return true;
            }
            return false;
        }
    };
    
  • 相关阅读:
    Bean
    DI
    require import export
    JSON转js
    vue路由相关
    JS引号区别
    Go语言系列之标准库strconv
    Go语言系列之标准库flag
    Go语言系列之并发编程
    Go语言系列之自定义实现日志库
  • 原文地址:https://www.cnblogs.com/YenKoc/p/12779946.html
Copyright © 2011-2022 走看看