二叉树的构建
(1)首先我们需要创建一个类构建节点
package com.qcby.tree;
public class TreeNode {
public TreeNode leftChild;
public TreeNode rightChild;
public Integer value;
public TreeNode(Integer value) {
this.value = value;
}
}
(2)然后需要一个测试类
package com.qcby.tree;
public class Test {
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(5);
TreeNode treeNode1 = new TreeNode(4);
TreeNode treeNode2 = new TreeNode(6);
TreeNode treeNode3 = new TreeNode(7);
treeNode.leftChild = treeNode1;
treeNode.rightChild= treeNode2;
treeNode2.rightChild = treeNode3;
(3)构建二叉树
package com.qcby.tree;
import java.util.LinkedList;
public class BinaryTree {
//定义当前整棵树的记录
public TreeNode root;
//方法---》
public void insert(Integer value){
// 新建一个节点
TreeNode newNode = new TreeNode(value);
if(root==null){
root = newNode;
return;
}
//创建节点进行遍历
TreeNode currentNode = root;
//定义一个新的指针:记录currentNode的上一个地址
TreeNode parentNode;
while (true){
parentNode = currentNode;
if (newNode.value > currentNode.value){
currentNode = currentNode.rightChild;
if (currentNode == null){
parentNode.rightChild = newNode;
return;
}
}else {
currentNode = currentNode.leftChild;
if (currentNode== null){
parentNode.leftChild = newNode;
return;
}
}
}
}
}
还可以使用递归方法
package com.qcby.tree;
import java.util.LinkedList;
public class BinaryTree {
//定义当前整棵树的记录
public TreeNode root;
public TreeNode insertdiGui(Integer value,TreeNode node){
// 新建一个节点
TreeNode newNode = new TreeNode(value);
if(root==null){
return root = newNode;
}
if (value>node.value){
if (node.rightChild == null){
node.rightChild = newNode;
return root;
}
return insertdiGui(value,node.rightChild);
}else {
if (node.leftChild == null){
node.leftChild = newNode;
return root;
}
return insertdiGui(value,node.leftChild);
}
}
}
三种遍历方式:(我们称这种遍历方式为深度优先遍历)
1、先(前)序遍历:先遍历父节点,再遍历左子树,在遍历右子树
我们遍历出的结果为 A BDHI CFG
2、中序遍历:先遍历左子树,在遍历父节点,再遍历右子树
我们遍历出的结果为 HDIBAFCG
3、后序遍历:先遍历左子树,再遍历右子树,再遍历父节点
我们遍历出的结果为 HIDBFGCA
注:父节点再什么位置,就是什么样的遍历方式
广度优先遍历
我们需要一个辅助队列,定义一个指针指向A,当前B和C都会被扫描到,此时A输出;指针指向B,扫描到D,B输出,指针指向C.......
代码实现
//中序
public void put(TreeNode Node) {
if(Node!=null) {
put(Node.leftChild);
System.out.println(Node.value);
put(Node.rightChild);
}
}
//后序
public void put1(TreeNode Node) {
if(Node!=null) {
put(Node.leftChild);
put(Node.rightChild);
System.out.println(Node.value);
}
}
//前序
public void put2(TreeNode Node) {
if(Node!=null) {
put(Node.leftChild);
put(Node.rightChild);
System.out.println(Node.value);
}
}