一、树及节点定义
/*
树
*/
type Tree struct {
rootNode *TreeNode // 根节点确定一棵树
}
/*
树节点
*/
type TreeNode struct {
nodeValue int32
Parent *TreeNode // 父节点,根节点没有
LNode *TreeNode // 左子节点
RNode *TreeNode // 右子节点
}
二、构建完全二叉树
基本思路:先生成所有的节点,存到链表中,然后从根节点(curNode)开始依次将后面被添加的节点(addNode)加到curNode 的子节点,直到链表元素全部添加完毕,代码如下
func buildTree(values... int32) *Tree{
if len(values) == 0 {
return nil
}
tree := Tree{}
nodeList := list.New()
for i:=0; i< len(values); i++ {
node := TreeNode{}
node.nodeValue = values[i]
nodeList.PushBack(&node)
}
curNode := nodeList.Front()
addNode := nodeList.Front().Next()
for addNode != nil {
node := curNode.Value.(*TreeNode)
if node.LNode == nil {
node.LNode = addNode.Value.(*TreeNode)
} else if node.RNode == nil {
node.RNode = addNode.Value.(*TreeNode)
curNode = curNode.Next()
}
addNode.Value.(*T