算法——建立线索二叉树
Posted 高、远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法——建立线索二叉树相关的知识,希望对你有一定的参考价值。
【0】建立线索二叉树和遍历线索二叉树基本上是一样的
建立如图二叉树:
黑色的箭头表示线索!!!
【1】代码:
一、TreeNode
节点:
public class TreeNode {
int no;
String name;
TreeNode left;
TreeNode right;
//用0表示指向左子树或者右子树
//用1表示指向前驱后者后继节点
int leftType;
int rightType;
public TreeNode(int no, String name) {
this.no = no;
this.name = name;
}
@Override
public String toString() {
return "TreeNode{" +
"no=" + no +
", name='" + name + '\\'' +
", leftType=" + leftType +
", rightType=" + rightType +
'}';
}
}
二、BinaryTree
二叉树
public class BinaryTree {
//二叉树根节点
TreeNode head;
public BinaryTree(TreeNode head) {
this.head = head;
}
}
三、线索二叉树
/**
* 中序线索二叉树
*/
public class ThreadedTree {
//当前节点的前一个节点
static TreeNode pre = null;
public static void main(String[] args) {
TreeNode head = new TreeNode(1, "宋江");
TreeNode node2 = new TreeNode(2, "吴用");
TreeNode node3 = new TreeNode(3, "卢俊");
TreeNode node4 = new TreeNode(4, "林冲");
head.left = node2;
head.right = node3;
node3.right = node4;
BinaryTree bt = new BinaryTree(head);
begin(bt);
//测试代码
// System.out.println(head);
System.out.println(node2.right);
// System.out.println(node3);
// System.out.println(node4);
}
public static void begin(BinaryTree bt) {
if (bt.head == null)
return;
Threaded(bt.head);
}
//按照中序遍历的顺序线索化
public static void Threaded(TreeNode node) {
//线索化左子树
if (node.left != null)
Threaded(node.left);
//线索化当前节点
//线索化left指针
if (node.left == null) {
node.left = pre;
node.leftType = 1;
}
//线索化right指针
if (pre != null && pre.right == null) {
pre.right = node;
pre.rightType = 1;
}
//将pre指针后移
pre = node;
//线索化右子树
if (node.right != null)
Threaded(node.right);
}
}
【2】测试
我们发现node2.right
应该是node1
打印输出看下效果:
发现确实是打印的node1
以上是关于算法——建立线索二叉树的主要内容,如果未能解决你的问题,请参考以下文章