《剑指offer》笔记-第4章(1)

来源:互联网 发布:蒙古作文软件 编辑:程序博客网 时间:2024/05/16 03:21

第4章 解决面试题的思路

4.1面试官谈面试思路

       编码前讲自己的思路

       具体地将问题分析过程、证明

       举例子、画图的方式讲清楚问题本身和解决问题的关键

       分析的过程中发现错误和漏洞并改正

4.2画图让抽象问题形象化

面试题27:二叉树的镜像

实现函数,输入一棵二叉树,输出它的镜像(照镜子,左节点变成右节点),节点定义如下:

struct BinaryTreeNode{int m_nValue; BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;}

 测试用例:

   功能测试:只有一个节点的二叉树;普通二叉树;完全二叉树;只有左子树/右子树的二叉树;

   特殊输入:二叉树根节点是null;

分析:

   1.    当指前序遍历二叉树,如果节点有子节点,则交换子节;直到交换完所有节点(除根节点外)

   2.    可用递归或循环实现;

面试题28:对称的二叉树

   实现函数,输入一棵二叉树,判断它是不是对称的。

   如果一棵二叉树和它的镜像一样,则它是对称的。

测试用例:

    功能测试:对称的二叉树;结构不对称的二叉树;结构对称节点值不对称的二叉树;

    特殊输入:二叉树根节点是null,只有一个节点的二叉树;所有节点值都相同的二叉树(结构不对称);

分析:

    1.    前序遍历二叉树 (根节点、左节点、右节点)的对称遍历是 (根节点、右节点、左节点)

    2.    如果两种遍历的结果不相同,则一定不是对称的;

    3.    如果两种遍历的结果相同,也有可能是所有节点值相同的不对称二叉树;

    4.    在遍历结果中加入null值,则可避免上述情况的出现;

面试题29:顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

测试用例:

    功能测试:多行多列数组;只有一行的数组;只有一列的数组;

    特殊输入:只有一个数的数组;

分析:

    1.    画图分析:5*5矩阵最后一圈剩下1个数,坐标是(2,2);

    2.    6*6矩阵最后一圈剩下4个数,以(2,2)开始;

    3.    4*5矩阵、5*4矩阵等非方阵的普通矩阵;

    4.    一列的矩阵、一行的矩阵、一个元素的矩阵单独考虑;

 

原创粉丝点击