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;
    }
};
原文地址:https://www.cnblogs.com/YenKoc/p/12779946.html