zoukankan      html  css  js  c++  java
  • 二叉树之插入查找

    1、什么是二叉树

    在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。

     


    2、源码

    1)Node节点

    public class Node {
    
    	int data;
    	Node leftChile;
    	Node rightChile;
    	
    	
    	public Node() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	public Node(int data) {
    		super();
    		this.data = data;
    	}
    
    	public Node(int data, Node leftChile, Node rightChile) {
    		super();
    		this.data = data;
    		this.leftChile = leftChile;
    		this.rightChile = rightChile;
    	}
    
    }

     

    2)Tree:

    public class Tree {
    
    	private Node root;
    
    	public Node getRoot() {
    		return root;
    	}
    
    	public void setRoot(Node root) {
    		this.root = root;
    	}
    	
    	public void insert(int data) {
    		Node currentNode = root;
    		if(null == currentNode) {
    			currentNode = new Node(data);
    			root = currentNode;
    		}else {
    			while(true) {
    				if(currentNode.data > data) {
    					if(null != currentNode.leftChile) {
    						currentNode = currentNode.leftChile;
    					}else {
    						currentNode.leftChile = new Node(data);
    						break;
    					}
    				}else {
    					if(null != currentNode.rightChile) {
    						currentNode = currentNode.rightChile;
    					}else {
    						currentNode.rightChile = new Node(data);
    						break;
    					}
    				}
    			}
    			
    		}
    	}
    	
    	public Node find(int data) {
    		Node currentNode = root;
    		boolean flag = true;
    		if(null == currentNode) {
    			return null;
    		}else {
    			if(currentNode.data == data) {
    				return currentNode;
    			}else {
    				while(flag) {
    					if(currentNode.data != data && null == currentNode.leftChile && null == currentNode.rightChile) {
    						flag = false;
    						return null;
    					}else {
    						if(currentNode.data > data && null != currentNode.leftChile) {
    							currentNode = currentNode.leftChile;
    						}else if(currentNode.data < data && null != currentNode.rightChile){
    							currentNode = currentNode.rightChile;
    						}else if(currentNode.data == data) {
    							flag = false;
    							return currentNode ;
    						}else {
    							currentNode = null;
    						}
    					}
    				}
    			}
    		}
    		return currentNode;
    	}
    }

    3)测试程序

    public class TreeApp {
    
    	public static void main(String[] args) {
    		Tree t = new Tree();
    		t.insert(50);
    		t.insert(30);
    		t.insert(20);
    		t.insert(60);
    		t.insert(65);
    		t.insert(35);
    		t.insert(55);
    	}
    }

    Reference:

    [1] Robert Lafore(著), 计晓云, 赵研, 曾希, 狄小菡(译), Java数据结构和算法(第二版), 中国电力出版社, 2004:287-288

     

     

     

  • 相关阅读:
    BAT 大厂最流行的测试技术体系与测试职业发展晋级指南
    通知 | 2021 第一期《测试开发实战宝典》赠书活动顺利结束!
    你还缺个好工作?但7月毕业季即将来临怎么办
    一图看懂云栖大会「云原生」重磅发布
    阿里云重磅发布业务中台产品 BizWorks,中台发展进入下一个阶段
    云栖·追踪云原生|Serverless入围阿里云十大核心技术
    先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
    New homework
    German
    suggestion
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10104115.html
Copyright © 2011-2022 走看看