前言
今天开始写关于树的题目,今天做的两个题目主要是使用递归来实现的。下面来聊一下主要思想吧。
一、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);
}
}
总结
学习树的题目需要将递归知识弄透才行,明天继续做树的题,好好整,加油