您的位置:首页 > 编程语言 > Java开发

java集合:二叉树

2016-01-15 17:42 363 查看
二叉树结点

// Class for storing a single node of a binary tree of ints

public class IntTreeNode {
public int data;
public IntTreeNode left;
public IntTreeNode right;

// constructs a leaf node with given data
public IntTreeNode(int data) {
this(data, null, null);
}

// constructs a branch node with given data, left subtree,
// right subtree
public IntTreeNode(int data, IntTreeNode left,
IntTreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}


二叉树

public class IntTree {
private IntTreeNode overallRoot;

// pre : max > 0
// post: constructs a sequential tree with given number of
//       nodes
public IntTree(int max) {
if (max <= 0) {
throw new IllegalArgumentException("max: " + max);
}
overallRoot = buildTree(1, max);
}

// post: returns a sequential tree with n as its root unless
//       n is greater than max, in which case it returns an
//       empty tree
private IntTreeNode buildTree(int n, int max) {
if (n > max) {
return null;
} else {
return new IntTreeNode(n, buildTree(2 * n, max),
buildTree(2 * n + 1, max));
}
}

// post: prints the tree contents using a preorder traversal
public void printPreorder() {
System.out.print("preorder:");
printPreorder(overallRoot);
System.out.println();
}

// post: prints the tree contents using a preorder traversal
// post: prints in preorder the tree with given root
private void printPreorder(IntTreeNode root) {
if (root != null) {
System.out.print(" " + root.data);
printPreorder(root.left);
printPreorder(root.right);
}
}

// post: prints the tree contents using a inorder traversal
public void printInorder() {
System.out.print("inorder:");
printInorder(overallRoot);
System.out.println();
}

// post: prints in inorder the tree with given root
private void printInorder(IntTreeNode root) {
if (root != null) {
printInorder(root.left);
System.out.print(" " + root.data);
printInorder(root.right);
}
}

// post: prints the tree contents using a postorder traversal
public void printPostorder() {
System.out.print("postorder:");
printPostorder(overallRoot);
System.out.println();
}

// post: prints in postorder the tree with given root
private void printPostorder(IntTreeNode root) {
if (root != null) {
printPostorder(root.left);
printPostorder(root.right);
System.out.print(" " + root.data);
}
}

// post: prints the tree contents, one per line, following an
//       inorder traversal and using indentation to indicate
//       node depth; prints right to left so that it looks
//       correct when the output is rotated.
public void printSideways() {
printSideways(overallRoot, 0);
}

// post: prints in reversed preorder the tree with given
//       root, indenting each line to the given level
private void printSideways(IntTreeNode root, int level) {
if (root != null) {
printSideways(root.right, level + 1);
for (int i = 0; i < level; i++) {
System.out.print("    ");
}
System.out.println(root.data);
printSideways(root.left, level + 1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: