这一篇是上一篇二叉树算法之构造的继续
二叉树基本运算
- 输出二叉树(这里用括号表示法)
- 计算二叉树深度
- 计算二叉树宽度
- 查找节点值为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
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。