求一颗二叉查找树的深度(java实现)

来源:互联网 发布:地址栏执行js 编辑:程序博客网 时间:2024/06/10 05:06


题目:输入一棵二元树的根结点,求该树的深度。

 

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

 

例如:输入二元树:

                                            10

                                          /     \

                                        6        14

                                      /         /   \

                                    4         12     16+++++

 

 

输出该树的深度3。

源代码:

package com.xz.java02;

class Node<T>{
 T value;
 int Height=0;
 Node left;
 Node right;
 Node(T x,Node <T>l,Node<T> r){
  value=x;
  left=l;
  right=r;
 }
}
public class Test  <T extends Comparable<? super T>>{

 private Node root;
 public void insert(T x){
  root=insert(x,root);
 }
 public Node insert(T x,Node <T>n){
  if(n==null){
   return new Node(x,null,null);
  }
  int compareResult=x.compareTo(n.value);
  if(compareResult<0){
   n.left=insert(x,n.left);
  }
  else if(compareResult>0){
   n.right=insert(x,n.right);
  }
  else
   ;
  return n;
 }
 public void print(){
  print(root);
  
 }
 public void print(Node n){
  if(n!=null){
   System.out.print(n.value+" ");
   print(n.left);
   print(n.right);
  }
 }
 //得到某个节点的深度
 public int getHeight(Node p){        //该节点左子树的高度和右子树的高度的较大者
  int Height;
  if(p.left==null&&p.right==null){
   return 1;
  }
  else if(p.left!=null&&p.right!=null){
   Height= Math.max(getLeftHeight(p.left), getRightHeight(p.right))+1;
   }
  else if(p.left==null){
   Height=getRightHeight(p.right)+1;
  }
  else {
   Height=getLeftHeight(p.left);
  }
  return Height;
 }
 //得到树的深度:
 public int getLeftHeight(Node AnyNode){   //得到某个节点左子树的高度
  Node p=AnyNode;
  int leftHeight=getHeight(p);
     return leftHeight;
 }
 public int getRightHeight(Node AnyNode){  //得到某个节点右子树的高度
  Node p=AnyNode;
  int rightHeight=getHeight(p);
  return rightHeight;
 }
 public static void main(String[] args) {

  Test t=new Test();
  t.insert(10);
  t.insert(6);
  t.insert(14);
  t.insert(4);
  t.insert(12);
  t.insert(16);
  t.insert(17);
  System.out.println("中序遍历结果:");
  t.print();
  System.out.println();
  System.out.println("树的深度为:");
     System.out.println(t.getHeight(t.root));
 }

}

0 0