📜  门| GATE-CS-2016(套装1)|第 41 题(1)

📅  最后修改于: 2023-12-03 14:58:31.210000             🧑  作者: Mango

题目

门 | GATE-CS-2016(套装1)|第 41 题

简介

这是一道GATE-CS 2016年的考题,主要考察对于递归和二叉树的理解。本题要求读者理解题目中给出的二叉树结构,并针对该结构进行递归遍历。

题目描述

对于给定的二叉树,从根节点(root)开始,对于每一个节点,将左节点(左儿子)的值赋给右节点,将当前节点的值赋给左节点,再依次递归遍历左右节点。给出遍历后该二叉树的结构。

示例输入

root.val = 1;
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);

      1
    /  \
   2    3
  / \
 4   5

示例输出

      1
    /  \
   3    2
      / \
     5   4

代码实现

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None
        
def invertTree(root: TreeNode) -> TreeNode:
    if not root:
        return None
    
    root.left, root.right = root.right, root.left
    invertTree(root.left)
    invertTree(root.right)
    
    return root

以上代码是python的实现,主要思路就是递归遍历每一个节点,并交换其左右节点的值。需要注意的一点是,我们需要使用后续遍历,即先左后右再根,每次递归时左右节点已经交换。