LeetCode题目
102.二叉树的层序遍历
题目链接:Binary Tree Level Order Traversal - LeetCode
代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func levelOrder(root *TreeNode) [][]int {
res := [][]int{}
if root == nil {
return res
}
que := []*TreeNode{root}
for len(que) > 0 {
size := len(que)
vec := []int{}
for i := 0; i < size; i++ {
node := que[0]
que = que[1:]
vec = append(vec, node.Val)
if node.Left != nil {
que = append(que, node.Left)
}
if node.Right != nil {
que = append(que, node.Right)
}
}
res = append(res, vec)
}
return res
}
226.翻转二叉树
题目链接:Invert Binary Tree - LeetCode
代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func invertTree(root *TreeNode) *TreeNode {
if root == nil {
return nil
}
root.Left, root.Right = root.Right, root.Left
invertTree(root.Left)
invertTree(root.Right)
return root
}
101.对称二叉树
题目链接:Symmetric Tree - LeetCode
代码如下:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func compare(left, right *TreeNode) bool {
if left == nil && right != nil {
return false
} else if left != nil && right == nil {
return false
} else if left == nil && right == nil {
return true
} else if left.Val != right.Val {
return false
}
outside := compare(left.Left, right.Right)
inside := compare(left.Right, right.Left)
return outside && inside
}
func isSymmetric(root *TreeNode) bool {
if root == nil {
return true
}
return compare(root.Left, root.Right)
}
总结
- [102.二叉树的层序遍历] 这份代码可以作为二叉树层序遍历的模板
- 这种层序遍历方式就是图论中的广度优先遍历,只不过这里应用在二叉树上