大神们,异常:“System.NullReferenceException”
hmdyc 2016-05-19 10:04:23 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 二叉树类
{
class LinkBiTree
{
static void Main(string[] args)
{
try
{
TreeNode<string> node1 = new TreeNode<string>("G", null, null);
TreeNode<string> node2 = new TreeNode<string>("D", null, node1);
TreeNode<string> node3 = new TreeNode<string>("B", node2, null);
TreeNode<string> node4 = new TreeNode<string>("E", null, null);
TreeNode<string> node5 = new TreeNode<string>("F", null, null);
TreeNode<string> node6 = new TreeNode<string>("C", node4, node5);
TreeNode<string> node7 = new TreeNode<string>("A", node3, node6);
LinkTree<string> linktree = new LinkTree<string>(node7);
Visit<string> v = new Visit<string>();
Console.Write("中序遍历的结果为:");
linktree.inorder(node7);
Console.WriteLine();
Console.Write("前序遍历的结果为:");
linktree.preorder(node7, v);
Console.WriteLine();
Console.Write("后序遍历的结果为:");
linktree.postorder(node7, v);
Console.WriteLine();
Console.Write("二叉树的高度为:" );
linktree.gethigh(node7);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.Read();
}
}
class TreeNode<T>
{
private TreeNode<T> lchild;
private TreeNode<T> rchild;
private T data;
public TreeNode<T>Lchild
{
get { return lchild;}
set { lchild = value; }
}
public TreeNode<T>Rchild
{
get { return rchild; }
set { rchild = value; }
}
public T Data
{
get { return data; }
set { data = value; }
}
public TreeNode()
{
lchild = null;
rchild = null;
}
public TreeNode(T item,TreeNode<T>left,TreeNode<T>right)
{
data = item;
lchild = left;
rchild = right;
}
public TreeNode(T item)
{
data = item;
lchild = null;
rchild = null;
}
public TreeNode(TreeNode<T>left,TreeNode<T>right)
{
data = default(T);
lchild = left;
rchild = right;
}
public TreeNode<T> getleft()
{
return lchild;
}
public TreeNode<T>getright()
{
return rchild;
}
}
class Visit<T>
{
public void print(T item)
{
Console.Write(item + "");
}
}
class LinkTree<T>
{
private TreeNode<T> head;
public TreeNode<T>Head
{
get { return head; }
set { head = value; }
}
public LinkTree()
{
head = null;
}
public LinkTree (TreeNode <T>h)
{
head = h;
}
public LinkTree(T item)
{
TreeNode<T> p = new TreeNode<T>(item);
head = p;
}
public LinkTree(T item,TreeNode<T>left,TreeNode<T>right)
{
TreeNode<T> p = new TreeNode<T>(item, left, right);
head = p;
}
bool IsEmpty()
{
if (head == null)
return true;
else
return false;
}
public TreeNode<T>root()
{
return head;
}
public void inorder(TreeNode<T>t)
{
if(IsEmpty())
{
Console.WriteLine("Tree is Empty");
}
if (!IsEmpty())
{
inorder(t.Lchild);
Console.WriteLine(t.Data + "");
inorder(t.Rchild);
}
}
public void preorder(TreeNode<T>t,Visit <T>vs)
{
if (IsEmpty())
Console.WriteLine("Tree is Empty");
if(!IsEmpty())
{
vs.print(t.Data);
preorder(t.getleft(), vs);
preorder(t.getright(), vs);
}
}
public void postorder(TreeNode<T>t,Visit <T>vs)
{
if (IsEmpty())
Console.WriteLine("Tree is Empty");
if(!IsEmpty())
{
postorder(t.getleft(), vs);
postorder(t.getright(), vs);
vs.print(t.Data);
}
}
public int gethigh(TreeNode<T>root)
{
if (IsEmpty())
{
return 0;
}
return Math.Max(gethigh(root.getleft()), gethigh(root.getright())) + 1;
}
}
}