完整代码实例: Java实现中序线索化二叉树,以及对其的中序遍历
结点类的实现
package DataStrcture.binarytreedemo_1;
public class BinaryTreeNodeThread_copy {
//
private BinaryTreeNodeThread_copy leftNode;
private BinaryTreeNodeThread_copy rightNode;
private int leftNodeType;
private int rightNodeType;
private int id;
private String name;
//设置左右孩子结点
public void setLeftNode(BinaryTreeNodeThread_copy node){
this.leftNode = node;
}
public void setRightNode(BinaryTreeNodeThread_copy node){
this.rightNode = node;
}
//get set 构造方法, toString()
public BinaryTreeNodeThread_copy(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "BinaryTreeNodeDel_copy{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
public BinaryTreeNodeThread_copy getLeftNode() {
return leftNode;
}
public BinaryTreeNodeThread_copy getRightNode() {
return rightNode;
}
public int getLeftNodeType() {
return leftNodeType;
}
public void setLeftNodeType(int leftNodeType) {
this.leftNodeType = leftNodeType;
}
public int getRightNodeType() {
return rightNodeType;
}
public void setRightNodeType(int rightNodeType) {
this.rightNodeType = rightNodeType;
}
}
二叉树类的实现:
package DataStrcture.binarytreedemo_1;
public class BinaryTreeThreaded_copy {
//二叉树的中序线索化 以及 线索化二叉树的中序遍历
//指定根节点
private BinaryTreeNodeThread_copy root;
private BinaryTreeNodeThread_copy pre;
public BinaryTreeThreaded_copy(BinaryTreeNodeThread_copy node){
this.root = node;
}
//二叉树的中序线索化
public void threadedBinaryTree(BinaryTreeNodeThread_copy node){
if(node == null) return;
//递归遍历左子树
threadedBinaryTree(node.getLeftNode());
//================开始线索化
///前驱的设置
if(node.getLeftNode() == null){
node.setLeftNode(pre);
node.setLeftNodeType(1);
}
//后继的设置
if( pre != null && pre.getRightNode() == null){
pre.setRightNode(node);
pre.setRightNodeType(1);
}
pre = node;// pre跟随node的脚步
//====================线索化操作结束
threadedBinaryTree(node.getRightNode());
}
public void midOrder(){
BinaryTreeNodeThread_copy node = root;
while(node != null){
//一口气遍历到左子树的最左边
// while(node.getLeftNode() != null)
while(node.getLeftNodeType() == 0)
node = node.getLeftNode();
//输出左边的这个结点
System.out.println(node);
//借助线索往上遍历,打印出所有线索为1结点指向的那个节点
if(node.getRightNodeType() == 1){
node = node.getRightNode();
System.out.println(node);
}
//线索不为1, 去看他的右子节点
node = node.getRightNode();
}
}
public static void main(String[] args) {
BinaryTreeNodeThread_copy node1 = new BinaryTreeNodeThread_copy(1,"smith");
BinaryTreeNodeThread_copy node3 = new BinaryTreeNodeThread_copy(3,"jack");
BinaryTreeNodeThread_copy node6= new BinaryTreeNodeThread_copy(6,"rose");
BinaryTreeNodeThread_copy node8 = new BinaryTreeNodeThread_copy(8,"john");
BinaryTreeNodeThread_copy node10 = new BinaryTreeNodeThread_copy(10,"dick");
BinaryTreeNodeThread_copy node14 = new BinaryTreeNodeThread_copy(14,"rolan");
BinaryTreeThreaded_copy tree = new BinaryTreeThreaded_copy(node1);
node1.setLeftNode(node3);
node1.setRightNode(node6);
node3.setLeftNode(node8);
node3.setRightNode(node10);
node6.setLeftNode(node14);
tree.threadedBinaryTree(node1);
tree.midOrder();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)