【leetcode Java】二叉树的递归遍历以及最大深度的求解(Java)

递归是非常神奇的方法,代码看起来很简洁。

对二叉树的遍历和求最大深度可以用递归的方法,主要思路就是遍历左子树,再遍历右子树。如果左子树上面的结点,有右孩子,则调用右子树的方法;遍历到左子树的叶节点的时候,返回,开始遍历右子树。如果右子树上面的结点有左孩子,则调用左子树的方法,遍历到右子树的叶子结点的时候,程序结束。

static void scanNodes(TreeNode root){
		if(root==null){
			return;
		}
		System.out.println(root.val); //先序遍历
		scanNodes(root.left);
		//System.out.println(root.val); 中序遍历
		scanNodes(root.right);
		//System.out.println(root.val); 后序遍历
	}
求二叉树的最大深度,也是这个思路,只需添加个返回值即可

static int getDepth(TreeNode root){
		if(root==null){
			return 0;
		}
		int left=getDepth(root.left);
		int right=getDepth(root.right);
		return left>right?left+1:right+1;
	}
下面附上,完整的测试代码,里面有二叉树结点的定义,大家一看就懂

class  TreeNode
{
	TreeNode left;
	TreeNode right;
	int val;
	TreeNode(int val){
		this.val=val;
	}
	//返回二叉树的深度
	static int getDepth(TreeNode root){
		if(root==null){
			return 0;
		}
		int left=getDepth(root.left);
		int right=getDepth(root.right);
		return left>right?left+1:right+1;
	}

	static void scanNodes(TreeNode root){
		if(root==null){
			return;
		}
		System.out.println(root.val); //先序遍历
		scanNodes(root.left);
		//System.out.println(root.val); 中序遍历
		scanNodes(root.right);
		//System.out.println(root.val); 后序遍历
	}

	public static void main(String[] args) 
	{
		TreeNode root=new TreeNode(1);
		TreeNode left1=new TreeNode(2);
		TreeNode left2=new TreeNode(3);
		TreeNode right1=new TreeNode(4);
		//创建一棵树
		root.left=left1;
		left1.right=left2;
		root.right=right1;
		scanNodes(root);
		System.out.println("树的深度是:"+getDepth(root));
		
	}
}
运行结果如下:

1

2

3

4

树的深度是:3


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值