运行效果
代码
using System;
namespace 平衡二叉树
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Program p = new Program();
p.main();
Console.ReadLine();
}
private void main() {
//int[] arry = { 4,1,5,2 };
int[] arry = { 4, 1, 5, 2 ,6};
Node node = new Node(3);
Node.curent = node;
foreach (int a in arry) {
Node.curent.insert(a);
}
Node.curent.bianli();
}
}
class Node{
public static Node curent;
public Node(int data) {
this.data = data;
left = null;
right = null;
parent = null;
}
public Node left;
public Node right;
public Node parent;
public int data;
public bool isToLeft(int data) {
return (this.data> data);
}
private void changeMyParent(Node newNode) {
Node nParent = parent;
if (parent != null) {
if (parent.right == this)
{
parent.right = newNode;
}
else if (parent.left == this)
{
parent.left = newNode;
}
else {
nParent = null;
Node.curent = newNode;
}
}
newNode.parent = nParent;
}
private void tunRight(int data) {
Node node = new Node(data);
Node ngen = null;
if (data < left.data){
ngen = left;
ngen.left = node;
node.parent = left;
}
else {
// 新node为根
ngen = node;
ngen.left = left;
left.parent = ngen;
}
ngen.right = this;
changeMyParent(ngen);
this.parent = ngen;
this.left = null;
}
private void tunLeft(int data) {
Node node = new Node(data);
Node nP = null;
if (data > right.data)
{
nP = right;
nP.right = node;
node.parent = right;
}
else
{
nP = node;
nP.right = right;
right.parent = nP;
}
nP.left = this;
changeMyParent(nP);
this.parent = nP;
this.right = null;
}
public void insert(int data) {
if ( data< this.data)
{
if (left == null)
{
insertLeft(data);
}
else
{
if (right == null)
{
tunRight(data);
}
else
{
left.insert(data);
}
}
}
else {
if (right == null)
{
insertRight(data);
}
else {
if (left == null)
{
tunLeft(data);
}
else
{
right.insert(data);
}
}
}
}
private void insertLeft(int data) {
Node node = new Node(data);
node.parent = this;
this.left = node;
}
private void insertRight(int data) {
Node node = new Node(data);
node.parent = this;
this.right = node;
}
public void bianli() {
despley();
if (left != null) {
left.bianli();
}
if (right != null) {
right.bianli();
}
}
private void despley() {
Console.WriteLine(data);
}
}
}