leetcode每日刷题之树篇(一)226题翻转二叉树,116题填充每个节点的下一个右侧节点指针

前言

今天开始写关于树的题目,今天做的两个题目主要是使用递归来实现的。下面来聊一下主要思想吧。

一、226翻转二叉树

在这里插入图片描述

1.题目描述

在这里插入图片描述
这个题目的思想就是,根节点不动,然后将左右节点进行互换,所以我们需要一个临时节点进行过渡。那么我们来做一下吧。

2.代码实现

class Solution {
    
    
    public TreeNode invertTree(TreeNode root) {
    
    
        if(root==null){
    
    
            return null;
        }//定义临时节点
         TreeNode temp = root.left;
         //左右节点进行交换
         root.left = root.right;
         root.right = temp;
         //递归实现
         invertTree(root.left);
         invertTree(root.right);
         return root;

    }
}

二、116填充每个节点的下一右侧节点指针

1.题目描述

在这里插入图片描述

2.代码实现

class Solution {
    
    
    public Node connect(Node root) {
    
    
         if(root == null){
    
    
             return null;
         }   
         //定义一个进行连接的函数
         twoConnect(root.left,root.right); 
         return root; 
 
        
    }
    public void twoConnect(Node node1,Node node2){
    
    
        if(node1==null||node2==null){
    
    
            return ;
        }
        //此时的node1代表左孩子,node2代表右孩子
        node1.next=node2;
        twoConnect(node1.left,node1.right);
        twoConnect(node2.left,node2.right);
        //这里是关键,因为包含不同父节点的情况
        twoConnect(node1.right,node2.left);
        
    }
}

总结

学习树的题目需要将递归知识弄透才行,明天继续做树的题,好好整,加油

猜你喜欢

转载自blog.csdn.net/tan45du_yuan/article/details/108741827