劍指offer——18.二叉樹的映象
阿新 • • 發佈:2018-12-13
題目描述:
操作給定的二叉樹,將其變換為源二叉樹的映象。
輸入描述:
二叉樹的映象定義:源二叉樹
8
/ \
6 10
/ \ / \
5 7 9 11
映象二叉樹
8
/ \
10 6
/ \ / \
11 9 7 5
解題思路1:
使用遞迴求解,每次將一個節點的左右子樹調換,然後對剩餘的子節點進行同樣的操作。
參考原始碼1:
class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot == NULL) return; TreeNode* tmp = pRoot->right; pRoot->right = pRoot->left; pRoot->left = tmp; Mirror(pRoot->left); Mirror(pRoot->right); } };
解題思路2:
不使用遞迴,使用迴圈,用一個數據結構每次將節點插入其中,然後對首部節點進行操作
參考原始碼2:
class Solution { public: void Mirror(TreeNode *pRoot) { if(pRoot == NULL) return; vector<TreeNode*> vec; vec.push_back(pRoot); while(vec.size()) { if(vec.front()->left != NULL) { vec.push_back(vec.front()->left); } if(vec.front()->right != NULL) { vec.push_back(vec.front()->right); } TreeNode* tmp = vec.front()->left; vec.front()->left = vec.front()->right; vec.front()->right = tmp; vec.erase(vec.begin()); } } };