关闭

奇葩算法与编程之生活遇见二叉树

标签: java二叉树编程生活
480人阅读 评论(0) 收藏 举报
分类:

这是组合设计模式。啦啦啦~~~~

package com.huawei.interview;

 

public class Node {

      public int value;

      public Node left;

      public Node right;

      

      public void store(int value)

      {

            if(value<this.value)

            {

                  if(left == null)

                  {

                        left = new Node();

                        left.value=value;

                  }

                  else

                  {

                        left.store(value);

                  }

            }

            else if(value>this.value)

            {

                  if(right == null)

                  {

                        right = new Node();

                        right.value=value;

                  }

                  else

                  {

                        right.store(value);

                  }                 

            }

      }

      

      public boolean find(int value)

      {     

            System.out.println("happen " + this.value);

            if(value == this.value)

            {

                  return true;

            }

            else if(value>this.value)

            {

                  if(right == null) return false;

                  return right.find(value);

            }else

            {

                  if(left == null) return false;

                  return left.find(value);

            }

 

      }

      

      public  void preList()

      {

            System.out.print(this.value + ",");

            if(left!=null) left.preList();

            if(right!=null) right.preList();

      }

      

      public void middleList()

      {

            if(left!=null) left.preList();

            System.out.print(this.value + ",");

            if(right!=null) right.preList();          

      }

      public void afterList()

      {

            if(left!=null) left.preList();

            if(right!=null) right.preList();

            System.out.print(this.value + ",");       

      }     

      public static void main(String [] args)

      {

            int [] data = new int[20];

            for(int i=0;i<data.length;i++)

            {

                  data[i] = (int)(Math.random()*100) + 1;

                  System.out.print(data[i] + ",");

            }

            System.out.println();

            

            Node root = new Node();

            root.value = data[0];

            for(int i=1;i<data.length;i++)

            {

                  root.store(data[i]);

            }

            

            root.find(data[19]);

            

            root.preList();

            System.out.println();

            root.middleList();

            System.out.println();         

            root.afterList();

      }

}

-----------------又一次临场写的代码---------------------------

import java.util.Arrays;

import java.util.Iterator;

 

public class Node {

      private Node left;

      private Node right;

      private int value;

      //private int num;

      

      public Node(int value){

            this.value = value;

      }

      public void add(int value){

            

            if(value > this.value)

            {

                  if(right != null)

                        right.add(value);

                  else

                  {

                        Node node = new Node(value);                    

                        right = node;

                  }

            }

            else{

                  if(left != null)

                        left.add(value);

                  else

                  {

                        Node node = new Node(value);                    

                        left = node;

                  }                 

            }

      }

      

      public boolean find(int value){

            if(value == this.value) return true;

            else if(value > this.value){

                  if(right == null) return false;

                  else return right.find(value);

            }else{

                  if(left == null) return false;

                  else return left.find(value);             

            }

 

      }

      

      public void display(){

            System.out.println(value);

            if(left != null) left.display();

            if(right != null) right.display();

            

      }

      

      /*public Iterator iterator(){

            

      }*/

      

      public static void main(String[] args){

            int[] values = new int[8];

            for(int i=0;i<8;i++){

                  int num = (int)(Math.random() * 15);

                  //System.out.println(num);

                  //if(Arrays.binarySearch(values, num)<0)

                  if(!contains(values,num))

                        values[i] = num;

                  else

                        i--;

            }

            

            System.out.println(Arrays.toString(values));

            

            Node root  = new Node(values[0]);

            for(int i=1;i<values.length;i++){

                  root.add(values[i]);

            }

            

            System.out.println(root.find(13));

            

            root.display();

            

      }

      

      public static boolean contains(int [] arr, int value){

            int i = 0;

            for(;i<arr.length;i++){

                  if(arr[i] == value) return true;

                  

            }

            return false;

      }

      

}

 

我有很多个(假设10万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在某个数据,(我想说出二叉树的好处,该怎么说呢?那就是说别人的缺点),假如存在数组中,那么,碰巧要找的数字位于99999那个地方,那查找的速度将很慢,因为要从第1个依次往后取,取出来后进行比较。平衡二叉树(构建平衡二叉树需要先排序,我们这里就不作考虑了)可以很好地解决这个问题,但二叉树的遍历(前序,中序,后序)效率要比数组低很多


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

用 java 实现二叉树

/** * 说明生活中遇到的二叉树,用 java 实现二叉树 。 这是组合设计模式。 我有很多个(假设 10 万个)数据要保存起来,以后还需要从保存的这些数据中检索是否存在 某个数据, (我...
  • yutiannanjingjiangsu
  • yutiannanjingjiangsu
  • 2013-09-23 15:05
  • 1059

二叉树类型笔试面试题大总结(含代码)

目录 一、二叉树的遍历-前序、中序、后序以及层次遍历(递归与非递归) 二、重建二叉树,依据前序遍历结果和中序遍历结果 三、判断二叉搜索树的后序遍历序列是否合法 四、二叉树中和为某一值的路径 五、将二叉...
  • xiajun07061225
  • xiajun07061225
  • 2013-10-15 23:28
  • 13177

C语言创建二叉树过程中遇到的一些问题

其实这些问题以前也遇到过,不过没总结,遇到又要搞段时间,现在总结下。 比如我们要创建颗如下二叉树,按前序输入,则为AB#D##C##: 开始代码写成下面这样: #define TElemType ...
  • u014285517
  • u014285517
  • 2015-12-31 16:35
  • 1280

二叉树的所有编程算法

  • 2009-12-11 22:28
  • 2KB
  • 下载

编程算法 - 二叉树的最低公共祖先 代码(C)

二叉树的最低公共祖先 代码(C)本文地址: http://blog.csdn.net/caroline_wendy二叉树的最低公共祖先(lowerest common ancestor), 首先先序遍...
  • u012515223
  • u012515223
  • 2014-09-18 15:09
  • 1575

编程算法 - 数组构造二叉树并打印

数组构造二叉树并打印本文地址: http://blog.csdn.net/caroline_wendy数组:构造二叉树, 需要使用两个队列(queue), 保存子节点和父节点, 并进行交换;打印二叉树...
  • u012515223
  • u012515223
  • 2014-06-16 10:31
  • 2029

算法编程题1-二叉树的按层遍历(含换行)

题型:二叉树的按层遍历 1.针对二叉树的宽度优先遍历 2.宽度优先遍历常使用队列结构 3.面试中,改题目经常对换行有所要求 具体实例: 给定一棵二叉树的头结点head,请按照大家现在看到的方式...
  • tiankong_
  • tiankong_
  • 2017-08-03 10:44
  • 139

【算法编程】求二叉树的深度-Maximu Depth of Binary Tree

题目大意:很简单,只需要找出一颗二叉树的最大深度即可,貌似没有时间和空间的要求。求解方法:更简单,只需要按照宽度优先的方法去查找即可,在这里我用a队列保存待扩展的节点,用b来保存a扩展出来的节点,再利...
  • chenriwei2
  • chenriwei2
  • 2015-07-03 18:18
  • 1427

编程算法 - 判断二叉树是不是平衡树 代码(C)

判断二叉树是不平衡树 代码(C)本文地址: http://blog.csdn.net/caroline_wendy题目: 输入一颗二叉树的根结点, 判断该树是不是平衡二叉树.二叉平衡树: 任意结点的左...
  • u012515223
  • u012515223
  • 2014-07-04 11:27
  • 1414

算法编程题2-二叉树的序列化和反序列化

,二叉树的序列化:.二叉树根据某种规则转换为字符串的过程(为什么要有这种操作,可以把二叉树序列化成字符串后保存在文件中) 二叉树的反序列化: 根据某种规则把字符串转换成二叉树的表示形式 序列化的方...
  • tiankong_
  • tiankong_
  • 2017-08-03 13:31
  • 72
    个人资料
    • 访问:52891次
    • 积分:1032
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:15篇
    • 译文:1篇
    • 评论:6条
    最新评论