遞迴是非常神奇的方法,代碼看起來很簡潔。
對二叉樹的遍曆和求最大深度可以用遞迴的方法,主要思路就是遍曆左子樹,再遍曆右子樹。如果左子樹上面的結點,有右孩子,則調用右子樹的方法;遍曆到左子樹的分葉節點的時候,返回,開始遍曆右子樹。如果右子樹上面的結點有左孩子,則調用左子樹的方法,遍曆到右子樹的葉子結點的時候,程式結束。
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