劈叉都会还不会下腰吗?(二叉树经典面试题详解)

在灯红酒绿的城市里,

一位喝的烂醉的小白程序猿猴,

游到马路的草丛边突然捡到了一个月光宝盒,

打开宝盒只见一卷发光的卷轴,

上面扭曲的写着几个大字,想拿大offer,记得多洗刷刷(刷题请看阿紫姐姐)


目录:

1.经典选择题

2.经典OJ题

 1.经典选择题

①.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为( A

AABDHECFG

B. ABCDEFGH

C. HDBEAFCG

D. HDEBFGCA 

 分析: 

 ②.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为 (A

A. E

B. F

C. G

D. H

分析:

③.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列(D)。

A. adbce

B. decab

C. debac

D. abcde 

 分析:

2.经典OJ题 

 ①二叉树的最大深度:力扣

给定一个二叉树,找出其最大深度:

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

 示例:
给定二叉树 [3,9,20,null,null,15,7]

返回它的最大深度 3 

 分析:

 代码:

int maxDepth(struct TreeNode* root){
    if(root == NULL)
    return 0;
    int left = maxDepth(root->left);
    int right = maxDepth(root->right);
    return left > right ? left + 1 : right + 1;
}

②平衡二叉树:力扣

给定一个二叉树,判断它是否是高度平衡的二叉树 

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 

 

 代码:

int maxDepth(struct TreeNode* root){
    if(root == NULL)
    return 0;
    int left = maxDepth(root->left);
    int right = maxDepth(root->right);
    return left > right ? left + 1 : right + 1;
}

bool isBalanced(struct TreeNode* root){
    if(root == NULL)
    return true;

    int left = maxDepth(root->left);
    int right = maxDepth(root->right);
    return abs(left - right) < 2 && isBalanced(root->left) && isBalanced(root->right);
}

 本期二叉树也就完美落幕了。。。

        请期待下篇博客排序算法,你知道哪些???

QQ:2186529582
跟我一起get更多学习秘诀吧!!!

猜你喜欢

转载自blog.csdn.net/m0_66488562/article/details/123821780