递归

递归

LeetCode递归题目
在这里插入图片描述
合并两个有序链表:easy

class Solution {
public:    
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {        
	if (l1 == NULL) return l2;        
	if (l2 == NULL) return l1;
        if (l1->val <= l2->val){            
	        l1->next = mergeTwoLists(l1->next, l2);            
	        return l1;        
        }else{            
	        l2->next = mergeTwoLists(l1, l2->next);            
	        return l2;        
        }
    }
};

对称二叉树:easy

class Solution {
public:    
	bool isSymmetric(TreeNode* root) {        
		return ismirror(root, root);
	    }
	    
	bool ismirror(TreeNode* t1, TreeNode* t2){        
		if (t1== NULL && t2==NULL) return true;        
		if (t1==NULL || t2== NULL) return false;        

return (t1->val == t2-> val) && (ismirror(t1->left, t2->right)) &&ismirror(t1->right, t2->left);    
	   }
};

二叉树最大深度:easy

class Solution {
public:    
	int maxDepth(TreeNode* root) {        
		if(root == NULL) return 0;        
		int left = maxDepth(root->left);        
		int right = maxDepth(root->right);
        	return max(left, right)+1;
        }
};

二叉树的最近公共祖先:easy

class Solution {
public:    
	TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q){        
	//先找到p或者q就返回        
	if(root == NULL || root == p || root == q)            
		return root;                
	
	//在左右子树中找p和q        
	TreeNode* left = lowestCommonAncestor(root->left, p, q);
	TreeNode* right = lowestCommonAncestor(root->right, p, q);
	
        if(left == NULL) return right; //left为空,说明不在左子树        
        if(right == NULL) return left; //right为空,说明不在左子树
        return root;  //left、right均不为空,说明p、q在root左右两边    
        }
};

翻转二叉树:easy

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
            if(root == NULL) return root;
            TreeNode* tmp = root->left;        
            root->left = root->right;        
            root->right = tmp;                

	    invertTree(root->left);        
	    invertTree(root->right);        
	    return root;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值