树相关

1. 节点:

public void Node(){
  private Object value;
  private Node left;
  private Node right;
}
2.建立二叉排序(搜索)树(插入): 递归传递当前root以及要插入的节点。直到root为null时插入

public void insert(Node root,Node newNode){
  if(root == null){
	root = newNode;
	return;
  }
  if(newNode.value<root.value){
     insert(root.left,newNode);
  }else{
     insert(root.right,newNode);
  }
}

3. 遍历:

1)  先中后序遍历的先中后是指中间结点的遍历位置,儿子节点都是先左后右。代码传递当前根节点,只是打印的顺序不一样

a. 先序: 中左右

b. 中序: 左中右

c. 后序: 左右中

public void preOrder_scan(Node root){
    if(root!=null){
	  System.out.println(root.value);
	  preOrder_scan(root.left);
	  preOrder_scan(root.right);
	}
}

2) 层次遍历: 用queue保证子节点输出顺序在兄弟节点之后先进先出;队列的顺序是 兄弟节点-儿子节点。压节点时先左后右

public void levelOrder_scan(Node root){
    ArrayDeque<Node> queue = new ArrayDeque();
    queue.add(root);
    while(!queue.isEmpty()){
	Node node = queue.remove();
	System.out.println(node.value);
	if(node.left!=null){
	   queue.add(node.left);
	}
	if(node.right!=null){
	   queue.add(node.right);
	}
    }
}


3)深度遍历:用stack先压右儿子(先进后出),保证右边最后遍历。 栈的顺序是 儿子节点--右节点.压节点时先右后左
public void deepOrder_scan(Node root){
   Stack <Node> stack = new Stack ();
   stack.push(root);
   while(!stack.isEmpty()){
      Node node = queue.remove();
	  System.out.println(node.value);
	  if(node.right!=null){
		queue.push(node.right);
	  }
	  if(node.left!=null){
		queue.push(node.left);
	  }	  
   }
}

4.最值:最小值一直左孩子到底,最大值一直右孩子到底

public Object min(Node root){
   if(root==null) return null;
   Node node = root;
   while(node.left!=null){
      node = node.left;
   }
   return node.value;
}

5.查找,非递归,只是循环中比较大小确定左或者右子树,直到节点值相等

public Object searchNode(Object key){
   if(root==null) return null;
   Node node = root;
   while(!node.value.equals(key)){
      if(node==null){
	    return null;
	  }
	  if(key<node.value){
	    node = node.left;
	  } else{
	    node = node.right;	  
	  }	  
   }
   return node.value;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值