2

这一篇是上一篇二叉树算法之构造的继续

二叉树基本运算

  • 输出二叉树(这里用括号表示法)
  • 计算二叉树深度
  • 计算二叉树宽度
  • 查找节点值为value的的节点
  • 计算二叉树节点数
  • 计算二叉树叶子节点数

括号表示法输出二叉树

// 括号表示法输出
func DispBTNode(root *BinaryTreeNode) {
    if root != nil {
        fmt.Printf("%v", root.data)
        if root.lChild != nil || root.rChild != nil {
            fmt.Print("(")
            DispBTNode(root.lChild)
            if root.rChild != nil {
                fmt.Print(",")
            }
            DispBTNode(root.rChild)
            fmt.Print(")")
        }
    }
}

求二叉树高度

func BTHeight(root *BinaryTreeNode) int {
    if root == nil {
        return 0
    }
    lHeight := BTHeight(root.lChild)
    rHeight := BTHeight(root.rChild)
    if lHeight > rHeight {
        return lHeight + 1
    } else {
        return rHeight + 1
    }
}

求二叉树宽度

func BTWidth(root *BinaryTreeNode) int {
    var max, width = 0, 0
    if root == nil {
        return 0
    }
    treeQueue := queue.ItemQueue{}
    treeQueue.New()
    treeQueue.Enqueue(root)
    for !treeQueue.IsEmpty() {
        width = treeQueue.Size()
        if width > max {
            max = width
        }
        for index := 0; index < width; index++ {
            node := (treeQueue.Front()).((*BinaryTreeNode))
            treeQueue.Dequeue()
            if node.lChild != nil {
                treeQueue.Enqueue(node.lChild)
            }
            if node.rChild != nil {
                treeQueue.Enqueue(node.rChild)
            }
        }
    }
    return max
}

这里的ItemQueue来自于golang-data-structures

查找二叉树中值为value的节点

func FindNode(root *BinaryTreeNode, value string) *BinaryTreeNode {
    if root == nil {
        return nil
    }
    if root.data == value {
        return root
    }
    lResult := FindNode(root.lChild, value)
    if lResult != nil {
        return lResult
    }
    return FindNode(root.rChild, value)
}



二叉树节点数

func Nodes(root *BinaryTreeNode) int {
    if root == nil {
        return 0
    }
    lNum := Nodes(root.lChild)
    rNum := Nodes(root.rChild)
    return 1 + lNum + rNum
}



ufdf
6.7k 声望407 粉丝