LeetCode226 翻轉二叉樹
阿新 • • 發佈:2018-12-09
翻轉一棵二叉樹。
示例:
輸入:
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; } };