数据结构入门11 - 树『二叉树的层序遍历 | 二叉树的最大深度 | 对称二叉树』


💪💪💪此系列仅为记录本人补充学习数据结构相关知识,有兴趣的,大家可以共同学习👏👏👏

[= 二叉树的层序遍历 =]

题目描述

题目直通车

解题思路

二叉树的层序遍历:逐层从左至右遍历

解题方法

// 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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bennett_G

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值