import java.util.Arrays;
import java.util.Stack;
// 链式存储的二叉树
public class BSTree {
private TreeNode root = null;
public TreeNode getRoot() {
return root;
}
public BSTree(TreeNode root) {
this.root = root;
}
public boolean isEmpty() {
return root == null;
}
// 树的高度
public int height() {
return TreeNode.height(root);
}
// 节点个数
public int size() {
return TreeNode.size(root);
}
// 返回树中某节点的父节点
public TreeNode parent(TreeNode element) {
return (root == null || root == element) ? null : TreeNode.getParent(root, element);
}
// 定义树的节点
private static class TreeNode {
private int data;
private TreeNode leftChild = null;
private TreeNode rightChild = null;
public TreeNode(int data) {
this.data = data;
this.leftChild = null;
this.rightChild = null;
}
public static TreeNode getParent(TreeNode subTree, TreeNode element) {
if (subTree == null)
return null;
if (subTree.leftChild == element || subTree.rightChild == element)
return subTree;
TreeNode p = null;
// 递归左右子树
if ((p = getParent(subTree.leftChild, element)) != null)
return p;
else
return getParent(subTree.rightChild, element);
}
public static TreeNode getLeftChildNode(TreeNode element) {
return (element != null) ? element.leftChild : null;
}