💪💪💪此系列仅为记录本人补充学习数据结构相关知识,有兴趣的,大家可以共同学习👏👏👏
[= 二叉树的层序遍历 =]
题目描述
解题思路
二叉树的层序遍历:逐层从左至右遍历
解题方法
// go
var res [][]int
func levelOrder(root *TreeNode) [][]int {
if root == nil{
return nil
}
res = make([][]int, 0)
dfs(root, 0)
return res
}
func dfs(root *TreeNode, level int){
if root == nil{
return
}
if level == len(res){
res = append(res, []int{})
}
res[level] = append(res[level], root.Val)
dfs(root.Left, level+1)
dfs(root.Right,level+1)
}
// php
class Solution {
protected $result = [];
/**
* @param TreeNode $root
* @return Integer[][]
*/
function levelOrder($root) {
$this->dfs($root, 0);
return $this->result;
}
function dfs($root, $level) {
if ($root == null) return;
$this->result[$level][] = $root->val;
$this->dfs($root->left, $level+1);
$this->dfs($root->right, $level + 1);
}
}
[= 二叉树的最大深度 =]
题目描述
解题思路
递归遍历
解题方法
// go
var max int
func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}
left := maxDepth(root.Left)
right:= maxDepth(root.Right)
if (left > right) {
max = left +1
} else {
max = right +1
}
return max
}
// php
function maxDepth($root) {
if ($root == null) return 0;
$left = $this->maxDepth($root->left);
$right = $this->maxDepth($root->right);
return max($left, $right)+1;
}
[= 对称二叉树 =]
题目描述
解题思路
什么叫对称二叉树:一个树的左子树与右子树镜像对称
条件1: 它们的两个根结点具有相同的值
条件2: 每个树的右子树都与另一个树的左子树镜像对称
解题方法
// go
func isSymmetric(root *TreeNode) bool {
return check(root, root)
}
func check(p, q *TreeNode) bool {
if p == nil && q ==nil {
return true
}
if p ==nil || q == nil {
return false
}
return p.Val == q.Val && check(p.Left, q.Right) && check(p.Right, q.Left)
}
// php
class Solution {
/**
* @param TreeNode $root
* @return Boolean
*/
function isSymmetric($root) {
return $this->check($root, $root);
}
function check($left, $right) {
if ($left == null && $right == null) return true;
if ($left == null || $right == null) return false;
return $left->val == $right->val && $this->check($left->left, $right->right) && $this->check($left->right, $right->left);
}
}