递归是非常神奇的方法,代码看起来很简洁。 对二叉树的遍历和求最大深度可以用递归的方法,主要思路就是遍历左子树,再遍历右子树。如果左子树上面的结点,有右孩子,则调用右子树的方法;遍历到左子树的叶节点的时候,返回,开始遍历右子树。如果右子树上面的结点有左孩子,则调用左子树的方法,遍历到右子树的叶子结点的时候,程序结束。 - static void scanNodes(TreeNode root){
- if(root==null){
- return;
- }
- System.out.println(root.val);
- scanNodes(root.left);
-
- scanNodes(root.right);
-
- }
求二叉树的最大深度,也是这个思路,只需添加个返回值即可- 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);
-
- scanNodes(root.right);
-
- }
-
- 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
|