重新整理数据结构与算法(c#)—— 二叉树排序树[二十二]

2021-04-21 09:28

阅读:491

标签:mamicode   添加   算法   static   string   class   return   nod   输入   

前言

什么是二叉堆排序呢?

技术图片

就是上面这种,一个节点大于左节点,但是小于右节点,再我写的例子中会写出大于等于右节点。

那么如何让一个数组进行变成这种二叉树呢?

其实只要有规律就很简单。

第一个元素(0)作为根节点。

第二个元素如果比第一个元素则判断是否有左节点,如果没有左节点,就是它的左节点,如果有左节点就和它的左节点比较。

正文

直接上代码吧:

public class BinarySortTree
{
	//根节点
	Node root;
	public BinarySortTree(Node root)
	{
		this.root = root;
	}

	public BinarySortTree() : this(null)
	{

	}

	public void add(Node node)
	{
		if (root == null)
		{
			root = node;
		}
		else
		{
			this.root.addNode(node);
		}
	}

	public void infixOrder()
	{
		if (root == null)
		{
			Console.WriteLine("root 为空");
		}
		else
		{
			root.infixOrder();
		}
	}

	public Node searchNode(int value)
	{
		if (root==null)
		{
			Console.WriteLine("root 为空");
		}
		return root.searchNode(value);
	}
}

public class Node
{
	public Node left;

	public Node right;

	int value;

	public int Value { get => value; set => this.value = value; }

	public Node(int value)
	{
		this.Value = value;
	}
	//中序排序
	public void infixOrder()
	{
		if (this.left != null)
		{
			this.left.infixOrder();
		}
		Console.WriteLine(this);
		if (this.right != null)
		{
			this.right.infixOrder();
		}
	}

	public override string ToString()
	{
		return Value.ToString();
	}
	//增加元素
	public void addNode(Node node)
	{
		if (node.Value  value)
		{
			if (this.left != null)
			{
				return this.right.searchNode(value);
			}
			else
			{
				return null;
			}
		}
		else
		{
			if (this.left != null)
			{
				return this.left.searchNode(value);
			}
			else
			{
				return null;
			}
		}
	}
}

测试代码:

static void Main(string[] args)
{
	int[] arr = { 7, 3, 10, 12, 5, 1, 9, 2 };
	BinarySortTree binarySortTree = new BinarySortTree();
	//循环的添加结点到二叉排序树
	for (int i = 0; i 

测试结果:

技术图片

后面补一下删除节点的,看下以前的丢了不。

重新整理数据结构与算法(c#)—— 二叉树排序树[二十二]

标签:mamicode   添加   算法   static   string   class   return   nod   输入   

原文地址:https://www.cnblogs.com/aoximin/p/13266227.html


评论


亲,登录后才可以留言!