Java Tree
来源:互联网 发布:淘宝客户关系维护流程 编辑:程序博客网 时间:2024/05/18 03:34
节点的结构
public class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int x){val = x;}public TreeNode(){}}
给定数据集,构造BST
public TreeNode BSTinsert(TreeNode root, int element){if(null == root){root = new TreeNode(element);root.left = null;root.right = null;count++;return root;}if(element == root.val)return null;if(element < root.val)root.left = BSTinsert(root.left, element);elseroot.right = BSTinsert(root.right, element);return root;}public boolean createBST(int[] data){for(int element: data){if((root=BSTinsert(root,element)) ==null)return false;//System.out.println("insert: "+ element);}return true;}
中间结构
class MyQueue<T>{private LinkedList<T> queue; public MyQueue(){queue = new LinkedList<T>();}public void add(T t){queue.addFirst(t);}public T poll(){return queue.removeLast();}public boolean isEmpty(){return queue.isEmpty();}}class MyStack<T>{private LinkedList<T> data;public MyStack(){data = new LinkedList<T>();}public T pop(){return data.removeFirst();}public void push(T t){ data.addFirst(t);}public T getTop(){return data.getFirst();}public boolean isEmpty(){return data.isEmpty();}}
递归遍历BST
<pre name="code" class="java">public void inOrderTraverse(TreeNode root){if(null !=root){inOrderTraverse(root.left);System.out.println(root.val);inOrderTraverse(root.right);}}
非递归遍历BST
public void inOrderTraverseWithoutRec(BST bst){MyStack<TreeNode> TreeNodes = new MyStack<TreeNode>();TreeNode root = bst.root;TreeNode currantNode = root;while(currantNode!=null || !TreeNodes.isEmpty()){while(currantNode!=null){TreeNodes.push(currantNode);currantNode = currantNode.left;}if(TreeNodes.isEmpty())return;else{currantNode = TreeNodes.pop();System.out.println(currantNode.val);currantNode = currantNode.right;}}}public void PreOrderTraverseWithoutRec(BST bst){MyStack<TreeNode> TreeNodes = new MyStack<TreeNode>();TreeNode root = bst.root;TreeNode currantNode = root;while(currantNode!=null || !TreeNodes.isEmpty()){while(currantNode!=null){System.out.println(currantNode.val);TreeNodes.push(currantNode);currantNode = currantNode.left;}if(!TreeNodes.isEmpty()){currantNode = TreeNodes.pop();currantNode = currantNode.right;}}}public void postOrderTraverWithoutRec(BST bst){MyStack<TreeNode> TreeNodes = new MyStack<TreeNode>();TreeNode root = bst.root;TreeNode currantNode = root;while(currantNode!=null){for(;currantNode.left!=null;currantNode = currantNode.left)TreeNodes.push(currantNode);while(currantNode!=null &&(currantNode.right==null || currantNode.right==root)){System.out.println(currantNode.val);root = currantNode;if(TreeNodes.isEmpty())return;currantNode = TreeNodes.pop();}TreeNodes.push(currantNode);currantNode = currantNode.right;}}public void LevelOrder(BST bst){MyQueue<TreeNode> BSTreeNode = new MyQueue<TreeNode>();if(bst.root ==null)return;BSTreeNode.add(bst.root);while(!BSTreeNode.isEmpty()){TreeNode currantNode = BSTreeNode.poll();System.out.println(currantNode.val);if(currantNode.left!=null)BSTreeNode.add(currantNode.left);if(currantNode.right!=null)BSTreeNode.add(currantNode.right);}}
BST中第K个最小的数
public int kthSmallest(TreeNode root, int k) {if(size(root.left) == k-1)return root.val;else if(size(root.left) < k-1)return kthSmallest(root.right, k-(size(root.left)+1));elsereturn kthSmallest(root.left, k); }public int size(TreeNode root){if(root == null)return 0;if(null == root.left && null == root.right)return 1;elsereturn size(root.left)+size(root.right)+1;}
0 0
- Java Tree
- Java Tree
- Java tree
- java Tree
- java tree <转载>
- Tree Node in Java
- java实现tree功能
- Java动态Tree
- [Leetcode] Same Tree (Java)
- [Leetcode] Symmetric Tree (Java)
- LeetCode-Same Tree(java)
- java dom tree
- java--z-tree
- java实现B-Tree
- Balanced Binary Tree (Java)
- Symmetric Tree (Java)
- Same Tree (Java)
- Leetcode Same Tree Java
- android打开联系人的代码
- 安卓实习第十一天
- 安装交叉编译器arm-none-linux-gnueabi-gcc
- 目录
- CSS3学习笔记-选择器
- Java Tree
- iframe应用
- Web Service
- linux ubunu中安装mysql
- #101 (div.2) A. Amusing Joke
- python 错误处理
- Mybatis + MySql 插入时获取自增的主键
- 华为机试题:判断一个数字中是否包含两个相同的子串
- App主界面Tab实现方法