LeetCode226 翻转二叉树
Posted 咖喱橙的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode226 翻转二叉树相关的知识,希望对你有一定的参考价值。
翻转一棵二叉树。
示例:
输入:
4 / 2 7 / / 1 3 6 9
输出:
4 / 7 2 / / 9 6 3 1
备注:
这个问题是受到 Max Howell 的 原问题 启发的 :
谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。
/** * 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; } }; /* 算法思想: 非递归的方法也不复杂,跟二叉树的层序遍历一样,需要用queue来辅助,先把根节点加入队列中,然后从队中取出来,交换其左右节点,如果存在则分别将左右节点在加入队列中,以此类推直到队列中没有节点了停止循环,返回root即可。 */ //算法实现: class Solution { public: TreeNode* invertTree(TreeNode* root) { if (!root) return NULL; queue<TreeNode*> q; q.push(root); while (!q.empty()) { TreeNode *node = q.front(); q.pop(); TreeNode *tmp = node->left; node->left = node->right; node->right = tmp; if (node->left) q.push(node->left); if (node->right) q.push(node->right); } return root; } };
以上是关于LeetCode226 翻转二叉树的主要内容,如果未能解决你的问题,请参考以下文章