可以实现将一个值插入已将拍好的二叉树中
代码:
class Client_port {
public static void main(String[] args) {
Client_port cp=new Client_port();
cp.insert_node("17");
cp.insert_node("6");
System.out.println(cp.getRoot_node().getValue());
}
private Node_ root_node;// 创建一个根节点
public Node_ getRoot_node() {
return root_node;
}
public void setRoot_node(Node_ root_node) {
this.root_node = root_node;
}
// 插入
public void insert_node(String node_value) {
Node_ node_new = new Node_(node_value);// 创建成一个节点
// 如果根节点为空,则该节点就为根节点 为其初始化
if (root_node == null) {
root_node = node_new;
root_node.setLeftTreeNode(null);
root_node.setRightTreeNode(null);
} else {// 如果根节点不为空,就循环判断,找到缺孩子的节点(这才可以插入)-----判断他的左孩子与新节点比较,之后判断他的右孩子与新节点值比较,最后放到正确的位置
Node_ temp_current=root_node;//创建一个临时根节点,即最终新节点的位置
Node_ temp_root;
while(true){
temp_root=temp_current;//当前节点不为空,遍历:当前作为父节点 ,其子节点作为当前节点
if(Integer.valueOf(temp_current.getValue())<Integer.valueOf(node_new.getValue())){//新节点值比当前大,往其右放
temp_current=temp_current.getRightTreeNode();
if (temp_current == null) {
temp_root.setRightTreeNode(node_new);
return;
}
}else{
temp_current=temp_current.getLeftTreeNode();
if (temp_current == null) {
temp_root.setLeftTreeNode(node_new);
return;
}
}
}
}
}
class Node_ {
private Node_ leftTreeNode; // 左节点
private Node_ rightTreeNode; // 右节点
private String value;// 值
public Node_(String value) {
super();
this.value = value;
}
public Node_ getLeftTreeNode() {
return leftTreeNode;
}
public void setLeftTreeNode(Node_ leftTreeNode) {
this.leftTreeNode = leftTreeNode;
}
public Node_ getRightTreeNode() {
return rightTreeNode;
}
public void setRightTreeNode(Node_ rightTreeNode) {
this.rightTreeNode = rightTreeNode;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}}
先序遍历、中序遍历、后序遍历
// 先序遍历
public void pre_select(Node_ node_) {
if (node_ != null) {
System.out.print(node_.getValue() + " ");// 先根
pre_select(node_.getLeftTreeNode());// 左字数
pre_select(node_.getRightTreeNode());// 再有字数
}
}
// 中序遍历
public void in_select(Node_ node_) {
if (node_ != null) {
pre_select(node_.getLeftTreeNode());// 先左字数
System.out.print(node_.getValue() + " ");// 再根
pre_select(node_.getRightTreeNode());// 再有字数
}
}
// 后序遍历
public void after_select(Node_ node_) {
if (node_ != null) {
pre_select(node_.getLeftTreeNode());// 左字数
pre_select(node_.getRightTreeNode());// 再有字数
System.out.print(node_.getValue() + " ");// 最后根
}
}