二叉树
来源:互联网 发布:接单软件 编辑:程序博客网 时间:2024/06/06 17:09
二叉树
- 二叉树是一个连通的无环图,并且每一个顶点的度不大于3
- 在非空二叉树中,第i层的结点总数不超过 , i>=1;
- 深度为h的二叉树最多有 个结点(h>=1),最少有h个结点;
- 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
二叉树基本操作
- 节点的定义
/** * Created by ln on 2017/5/6. */public class Node { //左孩子 public Node left; //右孩子 public Node right; //key public int value; //color public int color; public void displayNode(){ //... }}
- 属性:根节点
public Node root;
- 插入操作
//插入节点 public void insert(int v,int c){ Node newNode = new Node(); newNode.value = v; newNode.color = c; if(root == null){ root = newNode; }else{ Node current = root; Node parent; while (true){ parent = current; if(v<parent.value){ current = parent.left; if(current==null){ parent.left = newNode; return; } }else{ current = parent.right; if(current==null){ parent.right=newNode; return; } } } } }
- 查找操作
//查找节点 public Node find(int key){ Node current = root; while (current.value!=key){ if(key<current.value){ current = current.left; }else{ current = current.right; } if(current==null){ return null; } } return current; }
- 查找最小
//查找最小节点 public Node findMin(){ Node current = root; while (true){ if(current.left==null){ break; }else { current = current.left; } } return current; }
- 查找最大
//查找最大节点 public Node findMax(){ Node current = root; while (true){ if(current.right==null){ break; }else { current = current.right; } } return current; }
- 删除操作
//删除节点 public boolean delete(int key){ boolean isLeft = true; Node current = root; Node parent = current; while (current.value!=key){ parent = current; if(key<current.value){ isLeft = true; current = current.left; }else{ isLeft = false; current = current.right; } if(current==null){ return false; } } //1. if(current.left==null&¤t.right==null){ if(current==root){ current=null; }else if(isLeft){ parent.left=null; }else { parent.right=null; } //2. }else if(current.right==null){ if(current==root){ root = current.left; }else if(isLeft){ parent.left=current.left; }else { parent.right=current.left; } // }else if(current.left==null) { if (current == root) { root = current.right; } else if (isLeft) { parent.left = current.right; } else { parent.right = current.right; } //3. }else { Node node = getLast(current); if(current==root){ root = node; }else if(isLeft){ parent.left=node; }else { parent.right=node; } node.left = current.left; } return true; } //寻找后继节点 public Node getLast(Node dNode){ Node rNode = dNode.right; Node parent = dNode; while (rNode.left!=null){ parent = rNode; rNode = rNode.left; } if(rNode!=dNode.right){ parent.left=rNode.right; rNode.right=dNode.right; } return rNode; }
- 遍历操作
//中序遍历 public void inOrder(Node node){ if(node!=null){ inOrder(node.left); System.out.print(node.value+" "); inOrder(node.right); } }
0 0
- 二叉树、二叉堆
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- centOS7,vsftpd,更改默认目录后nginx访问失败,403forbidden解决
- js实现增删改查
- bootstrapTable 插件使用注意点
- A
- 欢迎使用CSDN-markdown编辑器
- 二叉树
- HADDOP安装配置过程(新手初学)
- COJ-1867-John and Health rate
- webpack-dev-server的使用
- 王爽《汇编语言》课程设计二续(包含软盘操作)
- springboot 使用校验框架validation校验
- Linux下编译pjproject-2.6并运行例程simple_pjsua
- Json初步知识
- codevs 1222 信与信封问题(二分图匹配 可确定的关系)