题解 | #二叉树的镜像#

二叉树的镜像

http://www.nowcoder.com/practice/a9d0ecbacef9410ca97463e4a5c83be7

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return TreeNode类
 */
void reverse(struct TreeNode *q)
{
  if (q->left || q->right)
  {
    struct TreeNode *temp;
    temp = q->left;
    q->left = q->right;
    q->right = temp;
  }
}

struct TreeNode *Mirror(struct TreeNode *pRoot)
{
   if(!pRoot)
       return NULL;
  //队列层序遍历记录每一层根节点的位置
  //已有节点不删除
  struct TreeNode  *temp;
  struct TreeNode *que[1500];
  int front = 0, rear = 0;
  que[++rear] = pRoot;
  while (rear != front)
  {
    temp = que[++front];
    if (temp->left)
      que[++rear] = temp->left;
    if (temp->right)
      que[++rear] = temp->right;
  }
  for (int i = front; i >= 1; i--)
    reverse(que[i]);

  return  pRoot;

}


struct TreeNode *Mirror(struct TreeNode *pRoot)
{
  if (!pRoot)
    return NULL;
  //递归
  struct TreeNode *temp;
  temp = pRoot->left;
  pRoot->left = pRoot->right;
  pRoot->right = temp;

  pRoot->left = Mirror(pRoot->left);
  pRoot->right = Mirror(pRoot->right);

  return pRoot;
}


全部评论
递归解法不自然,应该使用后续遍历
点赞 回复 分享
发布于 2022-11-01 22:17 香港

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务