力扣226 翻转二叉树
题目:
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
示例:
输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
思路:
注意不是交换数值,而是指针交换。
(1)确定递归函数的参数和返回值
参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。
返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为TreeNode
。
(2)确定终止条件
当前节点为空的时候,就返回。
(3)确定单层递归的逻辑
选前序遍历,所先进行交换左右孩子节点,然后反转左子树,反转右子树。
class Solution {
public TreeNode invertTree(TreeNode root) {//1.确定参数和返回值
if(root==null){//2.确定终止条件
return null;
}
//3.确定单层递归逻辑
swapChildren(root);//根
invertTree(root.left);//左
invertTree(root.right);//右
return root;
}
private void swapChildren(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}
}
//迭代法
class Solution {
public TreeNode invertTree(TreeNode root) {
if(root==null){
return null;
}
Stack<TreeNode> st=new Stack<>();
st.push(root);
while(!st.isEmpty()){
TreeNode node=st.pop();
swap(node);
if(node.right!=null){
st.push(node.right);
}
if(node.left!=null){
st.push(node.left);
}
}
return root;
}
public void swap(TreeNode node){
TreeNode temp=node.left;
node.left=node.right;
node.right=temp;
}
}
tips:
访问和处理,有时候只需要替换一下访问或者处理的部分。
比如前中后序遍历的处理是将节点值添加到数组,那么这道题的处理逻辑为交换节点的左右孩子。将这一部分换后,会发现和最基本的前序遍历相同。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY