在一颗二叉树上插入节点
2016-09-02 17:29
127 查看
在一颗二叉树上插入节点,插入是建立在小于父节点,则插入到父节点左边,如果大于父节点,则插入到父节点右边。在插入树节点,需要判断树根是否为空,如果不为空,则需要当前节点指向树根和父节点指向当前节点。直到当前节点等于null,那么可以在父节点左边或者右边插入新节点,并且返回树根跳出循环。如果树根为空,直接把树根指向新创建的节点,实现过程如下所示:
package cn.edu.nwu.structs.tree;
/**
* @author jcm
* 插入树节点
*时间 2016年9月2日
*/
public class InsertBinaryTreeNode {
public static void main(String[] args) {
BinaryTreeNode root = null;
root = insertBinaryTNode(root,43);
root = insertBinaryTNode(root,87);
root = insertBinaryTNode(root,-43);
root = insertBinaryTNode(root,98);
show(root,1);
}
/**
* @author jcm
* 在一颗二叉树上插入节点,如果二叉树为空,就让树根指向新插入的节点
* @param root 树根
* @param data 数据
* @return 返回树根的节点
*/
public static BinaryTreeNode insertBinaryTNode(BinaryTreeNode root,int data){
//创建树节点
BinaryTreeNode newTNode = new BinaryTreeNode(data);
//如果树根是空的,就让树根指向新创建的树节点
if(root == null){
root = newTNode;
return root;
}else{
//建立当前树节点
BinaryTreeNode currentTNode = root;
while(true){
//让父节点指向当前节点
BinaryTreeNode parentTNode = currentTNode;
if(currentTNode.data > data){
currentTNode = currentTNode.leftTreeNode;
if(currentTNode == null){
parentTNode.leftTreeNode = newTNode;
return root;//跳出循环,并返回树根
}
}else{
currentTNode = currentTNode.rightTreeNode;
if(currentTNode == null){
parentTNode.rightTreeNode = newTNode;
return root;
}
}
}
}
}
//中序遍历,通过n控制层数
public static void show(BinaryTreeNode root,int n){
if(root == null){
return ;
}else{
show(root.leftTreeNode,n+1);
for (int i=0;i<n;i++){
System.out.print(" ");
}
System.out.println(root.data);
show(root.rightTreeNode,n+1);
}
}
}
package cn.edu.nwu.structs.tree;
/**
* @author jcm
* 插入树节点
*时间 2016年9月2日
*/
public class InsertBinaryTreeNode {
public static void main(String[] args) {
BinaryTreeNode root = null;
root = insertBinaryTNode(root,43);
root = insertBinaryTNode(root,87);
root = insertBinaryTNode(root,-43);
root = insertBinaryTNode(root,98);
show(root,1);
}
/**
* @author jcm
* 在一颗二叉树上插入节点,如果二叉树为空,就让树根指向新插入的节点
* @param root 树根
* @param data 数据
* @return 返回树根的节点
*/
public static BinaryTreeNode insertBinaryTNode(BinaryTreeNode root,int data){
//创建树节点
BinaryTreeNode newTNode = new BinaryTreeNode(data);
//如果树根是空的,就让树根指向新创建的树节点
if(root == null){
root = newTNode;
return root;
}else{
//建立当前树节点
BinaryTreeNode currentTNode = root;
while(true){
//让父节点指向当前节点
BinaryTreeNode parentTNode = currentTNode;
if(currentTNode.data > data){
currentTNode = currentTNode.leftTreeNode;
if(currentTNode == null){
parentTNode.leftTreeNode = newTNode;
return root;//跳出循环,并返回树根
}
}else{
currentTNode = currentTNode.rightTreeNode;
if(currentTNode == null){
parentTNode.rightTreeNode = newTNode;
return root;
}
}
}
}
}
//中序遍历,通过n控制层数
public static void show(BinaryTreeNode root,int n){
if(root == null){
return ;
}else{
show(root.leftTreeNode,n+1);
for (int i=0;i<n;i++){
System.out.print(" ");
}
System.out.println(root.data);
show(root.rightTreeNode,n+1);
}
}
}
相关文章推荐
- day11之求二叉树的高度+销毁一颗二叉树+链表每K个节点之间逆序
- 【二叉树12】求一颗二叉树中两个节点的最近公共父节点
- C#在线索二叉树P节点后插入S节点
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- 二叉树的遍历 插入 查找 删除 最大值 最小值 前驱 后继节点的查找
- javascript数据结构与算法--二叉树(插入节点、生成二叉树)
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- Codeforces Round #353 (Div. 2) D. Tree Construction(每个点按照二叉树排序树的插入插入到树中,问最后每个点的父亲节点的值是多少)
- 输入一颗二叉树的根节点,判断该树是不是平衡二叉树
- 判断一个节点是否在一棵二叉树中和判断一颗二叉树是否是另一颗树的子树——题集(十二)
- 在二叉树中插入节点
- 将任意一颗二叉树转变为每一个节点都是另外两个孩子节点的和
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 二叉树节点的插入与删除
- 求解一颗二叉树中两个叶子节点最长的路径
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- c++实现二叉树的查找,插入,删除,深度,叶子节点数,度为1的节点数(递归方法)及运行实例结果
- 在二叉树中插入节点
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
- (二叉搜索树10.1.2)POJ 1577 Falling Leaves(根据删除叶子节点的顺序输出计算一颗二叉树的前序遍历序列)