Tree
来源:互联网 发布:c语言void 的用法 编辑:程序博客网 时间:2024/06/14 11:23
1.BinaryTree(二分树)
(1)每个节点
- A value
- A parent
- A left child
- A right child
(2)traversal(遍历)
- 前序遍历
- 中序遍历
- 后序遍历
- (levelOrder)层遍历
利用 Queue 接口实现 FIFO (先进先出)遍历。
private void LevelOrder(TreeNode<E> root){Queue<TreeNode<E>> q = new LinkedList<TreeNode<E>>();q.add(root);while((!q.isEmpty())){TreeNode<E> curr = q.remove();if(curr != null){System.out.println(curr.key);q.add(curr.leftChild);q.add(curr.rightChild);}}}
(3) contains
private boolean Contains(E toFind){TreeNode<E> curr = root;int comp;while(curr != null){comp = curr.compareTo(toFind);if(comp < 0)curr = curr.rightChild;else if(comp > 0)curr = curr.leftChild;elsereturn true;}return flase;}注意:此处使用方法 compareTo() 需要在类中实现 Comparable 接口。( <E extends Comparable<? super E>>)
(4)Insert
public boolean insert(E toInsert){TreeNode<E> curr = root;int comp = toInsert.compareTo(curr.getData());while(comp < 0 && curr.getLeft() != null || comp > 0 && curr.getRight() != null){if(comp < 0)curr = curr.getLeft();elsecurr = curr.getRight(); comp = toInsert.compareTo(curr.getData());}if(comp < 0)curr.setLeftChild(toInsert, curr);else if(comp > 0)curr.setRightChild(toInsert, curr);elsereturn false;return true;}
(5)remove
private BinaryNode<AnyType> remove(AnyType x,BinaryNode<AnyType> t){if(t == null)return t; // 若没有找到,do nothingint compareResult = x.compareTo(t.element);if(compareResult < 0)t.left = remove(x,t.left);else if(compareResult > 0)t.right = remove(x,t.right);else if(t.left != null && t.right != null){ // 双儿子情况t.element = finMin(t.right).element; // 把右子树最小值提上,代替删除点t.right = remove(t.element,t.right); // 对右子树上的最小值进行删除}elset = (t.left != null) ? t.left : t.right; // 一儿子或无儿子,删除原点后指向其儿子或null值return t;}
注:此 remove 操作一直寻找右子树最小值进行替换,容易使 树 出现“”左沉“”现象。
2.AVL树
0 0
- Tree
- tree
- tree
- TREE
- Tree
- Tree
- tree
- tree
- tree
- tree
- tree
- tree
- Tree
- Tree
- tree
- TREE
- tree
- tree
- Activity相关备忘
- CALL与retn
- [整理]C#反射(Reflection)详解
- Linux 查看进程和删除进程
- C#模拟Windows键盘单击
- Tree
- 海思HI3518由于sensor对齐方式问题导致视频花屏
- vector数组元素的排序
- 状压dp(瞎BB)
- HDU1224
- c语言笔记——基本数据类型
- BZOJ 4821 [Sdoi2017]相关分析
- Redis、Memcache和MongoDB的区别
- 第十一章 使用类