最近开始找golang 开发工程师职位,针对算法相关二叉树相关常用面试题搞一遍:
package tree
import (
"fmt"
)
type BinaryTree struct {
Value int
Left *BinaryTree
Right *BinaryTree
}
func InitBinaryTree(root *BinaryTree) *BinaryTree {
l := BinaryTree{}
r := BinaryTree{}
root.Left = l.NewBinaryTreeNode(2)
root.Right = r.NewBinaryTreeNode(3)
return root
}
func (this *BinaryTree) NewBinaryTreeNode(value int) *BinaryTree {
this.Value = value
this.Left = nil
this.Right = nil
return this
}
// 计算二叉树节点个数
func GetNodeNum(root *BinaryTree) int {
if root == nil {
return 0
} else {
return GetNodeNum(root.Left) + GetNodeNum(root.Right) + 1
}
}
// 计算二叉树的深度
func GetDegree(root *BinaryTree) int {
if root == nil {
return 0
}
var maxDegree = 0
if GetDegree(root.Left) > GetDegree(root.Right) {
maxDegree = GetDegree(root.Left)
} else {
maxDegree = GetDegree(root.Right)
}
return maxDegree + 1
}
// 前序遍历: 根-> 左子树 -> 右子树
func PreOrder(root *BinaryTree) {
if root == nil {
return
}
fmt.Printf("%d->", root.Value)
PreOrder(root.Left)
PreOrder(root.Right)
}
// 中序: 左子树-> 根 -> 右子树
func InOrder(root *BinaryTree) {
if root == nil {
return
}
InOrder(root.Left)
fmt.Printf("%d->", root.Value)
InOrder(root.Right)
}
// 后序: 左子树-> 右子树 -> 根
func PostOrder(root *BinaryTree) {
if root == nil {
return
}
PostOrder(root.Left)
PostOrder(root.Right)
fmt.Printf("%d->", root.Value)
}
// 求 K 层节点个数
func GetKthNum(root *BinaryTree ,k int ) int {
if root==nil{
return 0
}
if k==1{
return 1
}
return GetKthNum(root.Left,k-1)+GetKthNum(root.Right,k-1)
}
原文:https://www.cnblogs.com/shaoyu19900421/p/11628967.html