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

Java 二叉树一些基本操作

2014-10-28 09:50 309 查看
求二叉树中节点个数:

/*1. 求二叉树中的节点个数
递归解法:
(1)如果二叉树为空,节点个数为0
(2)如果二叉树不为空,二叉树节点个数 = 左子树节点个数 + 右子树节点个数 + 1
*/
public int GetNodeNum(TreeNode root){
if(root == null)
return 0;
return GetNodeNum(root.getLeft()) + GetNodeNum(root.getRight()) + 1;
}


求二叉树的深度:

/*2. 求二叉树的深度
递归解法:
(1)如果二叉树为空,二叉树的深度为0
(2)如果二叉树不为空,二叉树的深度 = max(左子树深度, 右子树深度) + 1
*/
public int GetDepth(TreeNode root){
if(root == null)
return 0;
int left = GetDepth(root.getLeft());
int right = GetDepth(root.getRight());
return Math.max(left, right) + 1;
}


二叉树广度遍历:

public void LevelTraverse(TreeNode root){
//AbstractQueue queue = new AbstractQueue();
Queue queue = new Queue();
if(root == null)
return;
queue.Enqueue(root);
while(queue.size != 0){
TreeNode Node = queue.Dequeue();
System.out.println(Node.getValue());
if(Node.getLeft() != null){
queue.Enqueue(Node.getLeft());
}
if(Node.getRight() != null){
queue.Enqueue(Node.getRight());
}
}
}


判断一个二叉树是不是满二叉树:

/*
* 判断一个二叉树是不是满二叉树
*/
public boolean IsFullTree(TreeNode root){
boolean flag = false;
Queue queue = new Queue();
if(root == null)
return true;
queue.Enqueue(root);
while(queue.size != 0){
TreeNode node = queue.Dequeue();
if(flag == true){//flag = true表示已有节点左右子树为null
if(node.getLeft() != null ||node.getRight() != null){
return false;
}
break;
}
else{
//节点左右子树不为空,则左右节点入队
if(node.getLeft() != null && node.getRight()!=null){
queue.Enqueue(node.getLeft());
queue.Enqueue(node.getRight());
}
//节点右子树为空,左节点入队
else if(node.getLeft() != null && node.getRight() == null){
flag = true;
queue.Enqueue(node.getLeft());
}//左节点为空,右子树不为空,直接返回FALSE
else if(node.getLeft() == null && node.getRight() != null){
return false;

}
else
{//左右都为空,则为叶子节点
flag = true;
}
}
}
return true;
}


判断二叉树B是不是A的子结构:

/*
* 判断树root2是不是树root1的子结构
*/
public boolean SubTree(TreeNode root1,TreeNode root2){
boolean result = false;
if(root1 != null && root2 != null){
if(root1.getValue() == root2.getValue()){
result = Dostree(root1,root2);
}
if(!result){
result = SubTree(root1.getLeft(),root2);
}
if(!result){
result = SubTree(root1.getRight(),root2);
}
}
return result;
}
public boolean Dostree(TreeNode root1,TreeNode root2){
if(root1 == null)
return false;
if(root2 == null)
return false;
if(root1.getValue() != root2.getValue())
return false;
return Dostree(root1.getLeft(),root2.getLeft()) && Dostree(root1.getRight(),root2.getRight());
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: