用java解leetcode上easy题3

本文探讨了LeetCode上编号226的翻转二叉树题目,通过递归方式实现算法,并尝试从零构建一棵二叉树进行翻转操作。文章记录了作者在实现过程中的思考与疑惑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的第三题:

226. Invert Binary Tree

还是不习惯写封装的函数,写着写着,怎么就找不到输入输出了呢?这道题本来方法很简单,两个递归调用就解决了,而且还是0ms,可是我想还原完整的函数入口,就重新建树,输出,可是居然不对了,哎呀,怎么搞得,好笨呐/(ㄒoㄒ)/~~

原本的别人的0ms方法是这样的:

public class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        
        TreeNode temp = root.left;
        root.left = invertTree(root.right);
        root.right = invertTree(temp);
        return root;
    }
}

        

我的是这样的:

public class Solution {
    public TreeNode invertTree(TreeNode root) {
        if (root == null) {
            return null;
        }
        
        TreeNode contain = root.left;//实例变量直接赋值来定义
	root.left = root.right;
	root.right = contain;
	invertTree(root.left);
	invertTree(root.right);
	return root;
		
    }
}

朕不知道有什么差别,还在请教原作者,然后还原完整代码是这样的:

import java.util.LinkedList;
import java.util.List;

//Definition for a binary tree node.
class TreeNode{
	int data;//作为root
	TreeNode left;
	TreeNode right;
	TreeNode(int x){
		left = null;
		right = null;
		data = x;
	}
}

public class InvertTree226 {
	int [] array = {4,2,7,1,3,6,9};
	 List<TreeNode> list = new LinkedList<>();//linkedlist没有定义初始大小的构造函数,和arraylist不一样
	
	public void creatBinaryTree(){
		for(int index=0; index<array.length; index++){
			list.add(new TreeNode(array[index]));//因为数组array是封装类型,要自动拆箱成int型
		}
		//利用子节点和父节点之间数学关系建树,但是要考虑出界问题
		for(int parentIndex=0; parentIndex<array.length/2; parentIndex++){
			if(parentIndex *2 + 1>array.length){
				break;
			}else{
				list.get(parentIndex).left = list.get(parentIndex * 2 + 1);
			}
			if(parentIndex *2 + 2>array.length){
				break;
			}else{
				list.get(parentIndex).right = list.get(parentIndex * 2 + 2);
			}			
		}
	}
	public TreeNode invertTree(TreeNode root){
		if(root==null){
			return null;
		}//用来做递归出口	
		
		TreeNode contain = root.left;//实例变量直接赋值来定义
		System.out.print(root.data);
		root.left = root.right;
		root.right = contain;
		invertTree(root.left);//遍历节点的左孩子
		invertTree(root.right);//遍历节点的右孩子,一个都不能少		
		return root;
		/*对比别人的
                  TreeNode temp = root.left;
                  root.left = invertTree(root.right);
                  root.right = invertTree(temp);
                  return root;
                 */
	}
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		InvertTree226 tree = new InvertTree226();
		tree.creatBinaryTree();
		TreeNode root = tree.list.get(0);
		TreeNode node = tree.invertTree(root);
		//System.out.print(node.right.right.data);//到底怎么输出啊
	}
}

想要向系统输入测试用例一样输入[4,2,3,6,null,4,8]什么的,但是用Integar[] 数组来定义,又不对,哭了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值