如果文章中出现什么错误,或遇到了什么困难。欢迎指出,感谢。
很久没有写算法了,现在要去面试又要捡起来。二叉树的遍历都快忘光了,在网上搜了搜,发现网上的各种算法都复杂(哭)。
我就打算自己总结一些适用于算法的二叉树算法。
二叉树结构定义
type TreeNode struct {
Val int
Left,Right *TreeNode
}
数组转二叉树
func CreateTree(nums []int) *TreeNode {
if len(nums) == 0 {
return nil
}
var create func(n int) *TreeNode
create = func(n int) *TreeNode {
if n >= len(nums) {
return nil
}
node := &TreeNode{
Val: nums[n]}
node.Left = create(2*n + 1)
node.Right = create(2*n + 2)
return node
}
return create(0)
}
非递归先序遍历
遍历顺序是:中,左,右
**注意:**右子节点先压栈,左子节点后压栈
func PreOrder(root *TreeNode)