1. 程式人生 > >LeetCode演算法題226:翻轉二叉樹解析

LeetCode演算法題226:翻轉二叉樹解析

翻轉一棵二叉樹。 示例: 輸入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

輸出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

這個題的思路就是兩數交換的思路,只是需要遍歷每一個節點,然後把每個節點的左右兩個節點都交換。既可以用遞迴,也可以用迭代,都是很簡單的思想。和之前一樣用c++寫遞迴,用python3寫迭代,迭代還是使用佇列來進行遍歷(層次遍歷)。 C++原始碼:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution { public: TreeNode* invertTree(TreeNode* root) { if (root==NULL) return NULL; TreeNode *tmp = root->left; root->left = invertTree(root->right); root->right = invertTree(tmp); return root; } };

python3原始碼:

# Definition for a binary tree node.
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ if root==None: return None q =
[root] while len(q): now = q.pop(0) tmp = now.left now.left = now.right now.right = tmp if now.left!=None: q.append(now.left) if now.right!=None: q.append(now.right) return root