A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Lemen 中级黑马   /  2015-8-22 22:24  /  325 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用的是先序遍历
  1. package com.bst;

  2. public class TreeNode<E extends Number> {//节点
  3.         private E element; //root
  4.         private TreeNode<E> left;
  5.         private TreeNode<E> right;
  6.        
  7.         public TreeNode(E e){
  8.                 element=e;
  9.         }
  10.         public TreeNode(){}
  11.        

  12.         public boolean insert(E e){
  13.                 //如果tree为空,则给root赋值
  14.                 if(this.element==null){
  15.                         this.setElement(e);
  16.                         return true;
  17.                 }
  18.                
  19.                 TreeNode<E> current=this;
  20.                 //parent 在插入e时会用到
  21.                 TreeNode<E> parent=this;
  22.                 while(current!=null)
  23.                 {
  24.                         //判断与root元素大小
  25.                         if(e.floatValue()<current.element.floatValue())
  26.                         {
  27.                                 parent=current;
  28.                                 current=current.left; //Go ledt 进入左子树!下同
  29.                         }else if(e.floatValue()>current.element.floatValue())
  30.                         {
  31.                                 parent=current;
  32.                                 current=current.right;
  33.                         }else
  34.                                 return false;
  35.                 }
  36.                 //current=new TreeNode<E>(e) 给current指向,但不是其节点的子树所指。所以一直用parent
  37.                 if(e.floatValue()<parent.element.floatValue())
  38.                         parent.left=new TreeNode<E>(e);
  39.                 else
  40.                         parent.right=new TreeNode<E>(e);
  41.                 return true;
  42.         }
  43.         public boolean search(E e){
  44.                 TreeNode<E> current=this;
  45.                 while(current!=null){
  46.                         if(e.floatValue()<current.element.floatValue())
  47.                                 current=current.left;
  48.                         else if(e.floatValue()>current.element.floatValue())
  49.                                 current=current.right;
  50.                         else
  51.                                 return true;
  52.                 }
  53.                 return false;
  54.         }
  55.         public void print(){
  56.                 if(left!=null)
  57.                         left.print();
  58.                         System.out.print(element+" ");
  59.                 if(right!=null){
  60.                         right.print();
  61.                 }
  62.         }
  63.        
  64.        
  65.         public E getElement() {
  66.                 return element;
  67.         }
  68.         public void setElement(E element) {
  69.                 this.element = element;
  70.         }
  71.         public TreeNode<E> getLeft() {
  72.                 return left;
  73.         }
  74.         public void setLeft(TreeNode<E> left) {
  75.                 this.left = left;
  76.         }
  77.         public TreeNode<E> getRight() {
  78.                 return right;
  79.         }
  80.         public void setRight(TreeNode<E> right) {
  81.                 this.right = right;
  82.         }
  83.        
  84.        
  85.         public static void main(String[] args) {
  86.                 TreeNode<Integer> integer =new TreeNode<Integer>();
  87.                 Integer[] intes={9,6,20,8,5,16,23};
  88.                 for(Integer i:intes)
  89.                         integer.insert(i);
  90.                 //System.out.println(integer.search(9));
  91.                 integer.print();
  92.         }

  93. }
复制代码


1 个回复

倒序浏览
赞赞!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马