50,530
社区成员
发帖
与我相关
我的任务
分享
public T getData() {
// TODO Auto-generated method stub
return data;
}
public class Node<T> {
public Node<T> lChild; //左孩子
private T data; //数据域
public Node<T> rChild; //右孩子
public Node(){ //构造函数,创建一个空节点
data=null;
lChild=null;
rChild=null;
}
public Node(T x){ //重载构造函数,创建一个数据值为x的节点
data=x;
lChild=null;
rChild=null;
}
public T getData() {
// TODO Auto-generated method stub
return data;
}
}
public class BinaryTree<T> {
private Node<T> root;
private final int maxNodes=100;
//1、创建一个空的二叉树
public BinaryTree(){
this.root=new Node<T>(); //创建根结点,该结点的数据域为空
}
//2、生成一棵二叉树
public BinaryTree(T x){
this.root=new Node<T>(x); //创建一棵以数据元素x为根结点的二叉树
}
//3、向二叉树中插入一个左孩子结点
public boolean insertLeft(T x,Node<T> parent){
if(parent==null) return false;
Node<T> p=new Node<T>(x); //创建一个新结点
if(parent.lChild==null)
parent.lChild=p; //将新结点直接设置到父结点的左孩子结点
else{
p.lChild=parent.lChild; //先将父结点原来的左子树设置为新结点的左子树
parent.lChild=p; //再将新结点设置到父结点的左孩子结点
}
return true;
}
//4、向二叉树中插入一个右孩子结点
public boolean insertRight(T x,Node<T> parent){
if(parent==null) return false;
Node<T> p=new Node<T>(x);
if(parent.rChild==null)
parent.rChild=p; //将新结点直接设置到父结点的右孩子结点
else{
p.lChild=parent.rChild; //先将父结点原来的左子树设置为新结点的右子树
parent.rChild=p; //再将新结点设置到父结点的右孩子结点
}
return true;
}
//5、删除二叉树的左子树
public boolean deleteLeft(Node<T> parent){
if(parent==null) return false;
else{
parent.lChild=null;
return true;
}
}
//6、删除二叉树的右子树
public boolean deleteRight(Node<T> parent){
if(parent==null) return false;
else{
parent.rChild=null;
return true;
}
}
//7、先序遍历二叉树
public void preorder(Node<T> node){
if(node==null) return;
else{
System.out.println(node.getData());
preorder(node.lChild);
preorder(node.rChild);
}
}
//8、中序遍历
public void inorder(Node<T> node){
if(node==null) return;
else{
inorder(node.lChild);
System.out.println(node.getData());
inorder(node.rChild);
}
}
//9、后序遍历
public void postorder(Node<T> node){
if(node==null) return;
else{
postorder(node.lChild);
postorder(node.rChild);
System.out.println(node.getData());
}
}
//10、层次遍历
public void levelOrder(){
Node<T>[] queue=new Node[this.maxNodes]; //构造一个队列
int front,rear; //队首指针,队尾指针
if(this.root==null) return;
front=-1; //队列暂为空,队首指针不指向任何一个数组元素
rear=0; //队列暂时为空,队尾指针指向第一个数组元素
queue[rear]=this.root; //二叉树的根结点进队列
while(front!=rear){
front++;
System.out.println(queue[front].getData()); /*访问队首结点的数据域*/
//将队首结点的左孩子结点进队列
if(queue[front].lChild!=null){
rear++;
queue[rear]=queue[front].lChild;
}
//将队首结点的右孩子结点进队列
if(queue[front].rChild!=null){
rear++;
queue[rear]=queue[front].rChild;
}
}
}
//11、按指定方式遍历二叉树
//i=0表示先序遍历,=1表示中序遍历,=2表示后序遍历,=3表示层次遍历
public void traversal(int i){
switch (i) {
case 0:preorder(this.root); break;
case 1:inorder(this.root); break;
case 2:postorder(this.root);break;
default:levelOrder();break;
}
}
//12、求二叉树的高度
//使用后序遍历法计算二叉树的高度
//当parent为root时,即可计算当前二叉树的高度
public int getHeight(Node<T> parent){
int lh,rh,max;
if(parent!=null){
lh=getHeight(parent.lChild); //求左子树的高度
rh=getHeight(parent.rChild); //求右子树的高度
max=lh>rh?lh:rh;
return max+1;
}
else return 0;
}
}
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
public boolean search(T x){
if(root==null)
return false;
return search(root, false, x);
}
private boolean search(Node<T> x, boolean flag, T date){
if(flag || x == null)
return flag;
flag = search(x.lChild, flag, date);
if(x.getData().equals(date))
return true;
flag = search(x.rChild, flag, date);
if(flag || x == null)
return flag;
return false;
}
[/quote]
谢谢,这边基本都完成了。 public boolean search(T x){
if(root==null)
return false;
return search(root, false, x);
}
private boolean search(Node<T> x, boolean flag, T date){
if(flag || x == null)
return flag;
flag = search(x.lChild, flag, date);
if(x.getData().equals(date))
return true;
flag = search(x.rChild, flag, date);
if(flag || x == null)
return flag;
return false;
}
public boolean search(T x){}
// //2、生成一棵二叉树
// public BinaryTree(T x){
// this.root=new Node<T>(x); //创建一棵以数据元素x为根结点的二叉树
// }
//2、生成一棵二叉树
public BinaryTree(Node<T> x){
this.root = x; //创建一棵以数据元素x为根结点的二叉树
}
(会不会引起其他方法bug我没看)@SuppressWarnings("all")
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Node<String> node = new Node("0");
BinaryTree<String> tree = new BinaryTree(node);
tree.insertLeft("1", node);
tree.insertLeft("2", node);
tree.insertLeft("3", node);
tree.insertLeft("4", node);
tree.insertLeft("5", node);
tree.insertLeft("5", node);
tree.insertLeft("5", node);
tree.insertLeft("5", node);
tree.preorder(node);
}
}
运行起来简单,关键你想要什么结果啊