分享

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

 雪柳花明 2016-09-23

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

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

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. static void scanNodes(TreeNode root){  
  2.         if(root==null){  
  3.             return;  
  4.         }  
  5.         System.out.println(root.val); //先序遍历  
  6.         scanNodes(root.left);  
  7.         //System.out.println(root.val); 中序遍历  
  8.         scanNodes(root.right);  
  9.         //System.out.println(root.val); 后序遍历  
  10.     }  
求二叉树的最大深度,也是这个思路,只需添加个返回值即可

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. static int getDepth(TreeNode root){  
  2.         if(root==null){  
  3.             return 0;  
  4.         }  
  5.         int left=getDepth(root.left);  
  6.         int right=getDepth(root.right);  
  7.         return left>right?left+1:right+1;  
  8.     }  
下面附上,完整的测试代码,里面有二叉树结点的定义,大家一看就懂

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. class  TreeNode  
  2. {  
  3.     TreeNode left;  
  4.     TreeNode right;  
  5.     int val;  
  6.     TreeNode(int val){  
  7.         this.val=val;  
  8.     }  
  9.     //返回二叉树的深度  
  10.     static int getDepth(TreeNode root){  
  11.         if(root==null){  
  12.             return 0;  
  13.         }  
  14.         int left=getDepth(root.left);  
  15.         int right=getDepth(root.right);  
  16.         return left>right?left+1:right+1;  
  17.     }  
  18.   
  19.     static void scanNodes(TreeNode root){  
  20.         if(root==null){  
  21.             return;  
  22.         }  
  23.         System.out.println(root.val); //先序遍历  
  24.         scanNodes(root.left);  
  25.         //System.out.println(root.val); 中序遍历  
  26.         scanNodes(root.right);  
  27.         //System.out.println(root.val); 后序遍历  
  28.     }  
  29.   
  30.     public static void main(String[] args)   
  31.     {  
  32.         TreeNode root=new TreeNode(1);  
  33.         TreeNode left1=new TreeNode(2);  
  34.         TreeNode left2=new TreeNode(3);  
  35.         TreeNode right1=new TreeNode(4);  
  36.         //创建一棵树  
  37.         root.left=left1;  
  38.         left1.right=left2;  
  39.         root.right=right1;  
  40.         scanNodes(root);  
  41.         System.out.println("树的深度是:"+getDepth(root));  
  42.           
  43.     }  
  44. }  
运行结果如下:

1

2

3

4

树的深度是:3

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多