大神们,异常:“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;
}
}
}
...全文
141 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
我叫小菜菜 2016-05-20
  • 打赏
  • 举报
回复
        bool IsEmpty()
        {
            if (head == null)
                return true;
            else
                return false;
        }
这个函数设计有问题。 如果只对head检查是否null,完全没必要封装一个函数。 个人觉得:
        bool IsEmpty(TreeNode<T>t)
        {
            if (t== null)
                return true;
            else
                return false;
        }
Justin-Liu 2016-05-20
  • 打赏
  • 举报
回复
t是null吧
xdashewan 2016-05-20
  • 打赏
  • 举报
回复
空指针,出错时候看下哪个对象为空
hmdyc 2016-05-19
  • 打赏
  • 举报
回复

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧