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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘伯阳 中级黑马   /  2012-6-6 19:41  /  1589 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如1到10的数,先存放在一个vector或者其他等等。然后我总要找出中间数,往二叉树里面放。
假设我先找了个5,放进二叉树里了。然后这个vector里的元素就分成左右两部分,我要分别找出左右两边的中间数,再往里放。如此循环往复。
如何实现这个算法,递归?  具体怎么弄,完全搞晕了~

4 个回复

倒序浏览
我用java代码帮你模拟了一下往二叉树里面插入数据的过程,希望对你有帮助
我插入的原则是左边小数,右边大数。
  1. package cn.ywl.staticdemo;

  2. class Node{
  3.        
  4.         private int value ;        //节点的值       
  5.         private Node left = null;  //用于记住该节点的左孩子       
  6.         private Node right = null; //用于记住该节点的右孩子

  7.         public int getValue() {
  8.                 return value;
  9.         }
  10.         public void setValue(int value) {
  11.                 this.value = value;
  12.         }
  13.         public Node getLeft() {
  14.                 return left;
  15.         }
  16.         public void setLeft(Node left) {
  17.                 this.left = left;
  18.         }
  19.         public Node getRight() {
  20.                 return right;
  21.         }
  22.         public void setRight(Node right) {
  23.                 this.right = right;
  24.         }
  25.        
  26.         public static boolean insert(Node node,int value){
  27.                
  28.                 if(node == null){    //如果节点为空,插入失败
  29.                         return false;
  30.                        
  31.                 }else{
  32.                         //大数放在右边,小数放在左边
  33.                         if(node.getValue()>value){  //如果value小于节点的值.....
  34.                                
  35.                                 if(node.getLeft()==null){  //如果该节点没有左孩子,把该值作为该节点的右孩子
  36.                                
  37.                                         addLeftNode(value, node);
  38.                                         return true;
  39.                                        
  40.                                 }else{                                                //如果该节点没有左孩子,进入递归调用
  41.                                         insert(node.getLeft(),value);
  42.                                 }
  43.                                
  44.                         }else{                //如果value小于节点的值.....
  45.                                
  46.                                 if(node.getRight()==null){  //如果该节点没有右孩子,把该值作为该节点的右孩子
  47.                                        
  48.                                         addRightNode(value, node);
  49.                                         return true;
  50.                                        
  51.                                 }else{
  52.                                         insert(node.getLeft(),value);//如果该节点没有右孩子,进入递归调用
  53.                                 }
  54.                         }
  55.                 }
  56.                 return false;
  57.                
  58.                
  59.         }
  60.        
  61.         public static void addLeftNode(int value,Node node){       
  62.                 Node left = new Node();
  63.                 left.setValue(value);
  64.                 node.setLeft(left);
  65.         }
  66.         public static void addRightNode(int value,Node node){       
  67.                 Node right = new Node();
  68.                 right.setValue(value);
  69.                 node.setRight(right);
  70.         }
  71. }

  72. public class TwoTreeDemo {

  73.         public static void main(String[] args) {
  74.                 Node mynode = new Node();
  75.                 mynode.setValue(10);
  76.                
  77.                 if(Node.insert(mynode, 5)){
  78.                        
  79.                         Node.insert(mynode, 6);
  80.                         Node.insert(mynode, 3);
  81.                         System.out.println(mynode.getLeft().getLeft().getValue());
  82.                         System.out.println(mynode.getLeft().getRight().getValue());
  83.                 }
  84.                
  85.         }

  86. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 很给力!

查看全部评分

回复 使用道具 举报
我用画图画了一个我运行的结果的图~~~
画图技术就那样,凑合着看吧,嘿嘿~~
回复 使用道具 举报
难道刚刚没传上图片吗?

未命名.jpg (22.89 KB, 下载次数: 51)

未命名.jpg
回复 使用道具 举报
伊文龙 发表于 2012-6-6 21:36
我用java代码帮你模拟了一下往二叉树里面插入数据的过程,希望对你有帮助
我插入的原则是左边小数,右边大 ...

恩恩   谢谢啊  我得慢慢研究下你的代码  好长啊~嘿嘿  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马