二叉树相关操作
来源:互联网 发布:pc蛋蛋计算器单双算法 编辑:程序博客网 时间:2024/04/25 06:38
在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。
二叉树的第i层至多有2^{i-1}个结点;
深度为k的二叉树至多有2^k-1个结点;
对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。
一棵深度为k,且有2^k-1个节点称之为满二叉树;
深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为1至n的节点对应时,称之为完全二叉树。
package sorttree;/** * Created by Leon on 2017/8/7. */class Node{ private int key; private Object value; public Node left; public Node right; private int level = 1; public Node(){} public Node(int key , Object value) { this.key = key; this.value = value; } public void setKey(int key) { this.key = key; } public void setValue(Object value) { this.value = value; } public void setLevel(int level) { this.level = level; } public int getKey() { return key; } public Object getValue() { return value; } public int getLevel() { return level; } @Override public String toString() { return "Node{" + "key=" + key + ", value=" + value + ", level=" + level + '}'; }}public class SortTree{ private Node root; public SortTree(){} public SortTree(Node root) { this.root = root; } public void insert(Node node) { if (this.root == null) { this.root = node; return; } else { Node currentNode = root; while(true) { if(node.getKey()>currentNode.getKey()) { if(currentNode.right == null) { currentNode.right = node; node.setLevel(node.getLevel()+1); return; } else { currentNode=currentNode.right; node.setLevel(node.getLevel()+1); } } else { if(currentNode.left == null) { currentNode.left = node; node.setLevel(node.getLevel()+1); return; } else { currentNode = currentNode.left; node.setLevel(node.getLevel()+1); } } } } } public void show() { show(this.root); } private void show(Node node) { if (node != null) { show(node.left); for(int i=1;i<node.getLevel();i++) { System.out.print(" "); } System.out.println(node.getKey()+":"+node.getValue()); show(node.right); } } public Node find(int key) { Node currentNode = root; while(currentNode!=null) { if (currentNode.getKey()==key) { return currentNode; } else if (currentNode.getKey()>key) { currentNode=currentNode.left; } else if (currentNode.getKey()<key) { currentNode=currentNode.right; } } return null; } public static void main(String[] args) { Node root = new Node(4, "A"); SortTree tree = new SortTree(root); tree.insert(new Node(3, "B")); tree.insert(new Node(5, "C")); tree.insert(new Node(1, "D")); tree.insert(new Node(0, "E")); tree.insert(new Node(2, "F")); tree.show(); System.out.println(tree.find(0)); System.out.println(tree.find(4)); }}
阅读全文
1 0
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树 相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树相关操作
- 二叉树的相关操作
- 二叉树相关操作收集
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树相关操作2
- 二叉树相关操作之一
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- LeetCode 39.Combination Sum & 40.Combination Sum II
- hadoop连接问题
- 安装虚拟机和java环境
- TCP三次握手四次挥手
- POJ 1930 Dead Fraction 数论
- 二叉树相关操作
- 斐波那契数列的三种实现方式
- Windows boost库安装 VS2010
- 经典算法学习:各种排序算法的模板类实现
- C++/MFC-Edit
- java二进制补码
- win10下快速部署docker
- requests上传文件出现501错误解决方法
- 3. ESP8266固件的编译(乐鑫原厂SDK)