【原理】
每个节点的儿子包括左儿子和右儿子
构造二叉树时,要插入的节点比当前节点大就往右儿子插入,比当前节点小就往左儿子插入。
【实现】
每个节点
public class CTreeNode
{
#region Fields
private int m_iData;
public int Data
{
get { return m_iData; }
set { m_iData = value; }
}
private CTreeNode m_oLeftTreeNode;
public CTreeNode LeftTreeNode
{
get { return m_oLeftTreeNode; }
set { m_oLeftTreeNode = value; }
}
private CTreeNode m_oRightTreeNode;
public CTreeNode RightTreeNode
{
get { return m_oRightTreeNode; }
set { m_oRightTreeNode = value; }
}
#endregion
}
二叉树
public class CBSTree
{
#region Fields
private CTreeNode m_oRootTreeNode;
public CTreeNode RootTreeNode
{
get { return m_oRootTreeNode; }
set { m_oRootTreeNode = value; }
}
#endregion
#region Construction
public CBSTree()
{
this.m_oRootTreeNode = null;
}
#endregion
}
插入操作
public class CBSTree
{
#region Insert
public void Insert(int iData)
{
//1.如果根节点为空,就添加根节点
if (null == this.m_oRootTreeNode)
{
this.m_oRootTreeNode = new CTreeNode()
{
Data = iData
};
}
//2.如果根节点不为空,就添加左右子节点
else
{
//3.如果iData数据小于当前节点,则加到当前节点的左儿子
if (iData < this.m_oRootTreeNode.Data)
{
//3.1.如果当前节点没左儿子,就加左儿子over
if (null == this.m_oRootTreeNode.LeftTreeNode)
{
this.m_oRootTreeNode.LeftTreeNode = new CTreeNode()
{
Data = iData
};
}
//3.2.如果当前节点有左儿子,左儿子继续玩
else
{
this.m_oRootTreeNode.LeftTreeNode._Insert(iData);
}
}
//4.如果iData数据大于当前节点,则加到当前节点的右儿子
else
{
//4.1.如果当前节点没右儿子,就加右儿子over
if (null == this.m_oRootTreeNode.RightTreeNode)
{
this.m_oRootTreeNode.RightTreeNode = new CTreeNode()
{
Data = iData
};
}
//4.2.如果当前节点有右儿子,右儿子继续玩
else
{
this.m_oRootTreeNode.RightTreeNode._Insert(iData);
}
}
}
}
#endregion
}
public class CTreeNode
{
#region Insert
internal void _Insert(int iData)
{
//3.如果iData数据小于当前节点,则加到当前节点的左儿子
if (iData < this.m_iData)
{
//3.1.如果当前节点没左儿子,就加左儿子over
if (null == this.m_oLeftTreeNode)
{
this.m_oLeftTreeNode = new CTreeNode()
{
Data = iData
};
}
//3.2.如果当前节点有左儿子,左儿子继续玩
else
{
this.m_oLeftTreeNode._Insert(iData);
}
}
//4.如果iData数据大于当前节点,则加到当前节点的右儿子
else
{
//4.1.如果当前节点没右儿子,就加右儿子over
if (null == this.m_oRightTreeNode)
{
this.m_oRightTreeNode = new CTreeNode()
{
Data = iData
};
}
//4.2.如果当前节点有右儿子,右儿子继续玩
else
{
this.m_oRightTreeNode._Insert(iData);
}
}
}
#endregion
}
浙公网安备 33010602011771号