您的位置:首页 > 其它

完全二叉树插入

2015-09-26 00:03 316 查看
题目:给一颗完全二叉树,要求插入一个节点后,依然是完全二叉树。

分析:利用完全二叉树的性质,找到要插入的位置,先判断左子树的最右结点与右子树的最左结点高度,如果相等,只需要插入到左子树即可,否则插入右子树。

实现:

/**题目:给完全二叉树插入一个节点,插完后保证还是完全二叉树
* @author ShaoCheng
* @version 1.0 2015-9-24
*/

class TreeNode{
int val;
TreeNode left, right;
TreeNode(int key){
val = key;
}
}

public class Main {
public static void main(String[] args){
TreeNode p1 = new TreeNode(1);
TreeNode p2 = new TreeNode(2);
TreeNode p3 = new TreeNode(3);
TreeNode p4 = new TreeNode(4);
p1.left = p2;
p1.right = p3;
p2.left = p4;

TreeNode node = new TreeNode(100);
TreeNode root = insertBinary(p1, node);
printTree(root);
}

//中序遍历
public static void printTree(TreeNode root){
if(root == null)
return;
System.out.println(root.val);
printTree(root.left);
printTree(root.right);
}

public static TreeNode insertBinary(TreeNode root, TreeNode node){
if(root == null)
return node;
else if(node == null)
return root;
if(root.left == null){
root.left = node;
return root;
}
else if(root.right == null){
root.right = node;
return root;
}

int lrh = 0;
int rrh = 0;
TreeNode pNode = root.left;
while(pNode != null){
lrh++;
pNode = pNode.right;
}

pNode = root.right;
while(pNode != null){
rrh++;
pNode = pNode.left;
}

if(lrh != rrh){
insertBinary(root.right, node);
}
else
insertBinary(root.left, node);
return root;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息