数据结构&算法-线索二叉树
Posted 彩色墨水
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构&算法-线索二叉树相关的知识,希望对你有一定的参考价值。
运行结果
代码
using System;
namespace ThreadedBinaryTree
{
class Program
{
static void Main(string[] args)
{
ThreadedBinaryTreeC threadedBinaryTreeC = new ThreadedBinaryTreeC();
string[] strarry = new string[] { "A", "B", "C", "D", "E", "F" };
ThreadedBinaryTreeC.Node root = threadedBinaryTreeC.CreateBinaryTree(strarry, 0);
threadedBinaryTreeC.inThreadOrder(root);
threadedBinaryTreeC.inThreadList(root);
}
}
class ThreadedBinaryTreeC
{
Node preNode = null;
public class Node
{
public string data;
public Node left;
public Node right;
public bool leftType;
public bool rightType;
public Node(string data)
{
this.data = data;
}
}
public Node CreateBinaryTree(string[] array, int index)
{
Node node = null;
if (index < array.Length)
{
node = new Node(array[index]);
node.left = CreateBinaryTree(array, index * 2 + 1);
node.right = CreateBinaryTree(array, index * 2 + 2);
}
return node;
}
public void inThreadOrder(Node node)
{
while (node == null)
{
return;
}
inThreadOrder(node.left);
if (node.left == null)
{
node.left = preNode;
node.leftType = true;
}
if (preNode != null && preNode.right == null)
{
preNode.right = node;
preNode.rightType = true;
}
preNode = node;
inThreadOrder(node.right);
}
public void inThreadList(Node node)
{
while (node != null && !node.leftType)
{
node = node.left;
}
while (node != null)
{
Console.WriteLine(node.data);
if (node.rightType)
{
node = node.right;
}
else
{
node = node.right;
while (node != null && !node.leftType)
{
node = node.left;
}
}
}
}
}
}
以上是关于数据结构&算法-线索二叉树的主要内容,如果未能解决你的问题,请参考以下文章
数据结构与算法__07--前序中序后序线索化二叉树,前序中序后序线索化二叉树遍历(Java语言版本)