C++实现二叉树的镜像操作(18)---《那些奇怪的算法》

来源:互联网 发布:找工作软件软件排行榜 编辑:程序博客网 时间:2024/06/06 05:50

我们需要实现二叉树的镜像操作,问题描述如下:
二叉树的镜像定义:源二叉树
8
/ \
6 10
/ \ / \
5 7 9 11
镜像二叉树
8
/ \
10 6
/ \ / \
11 9 7 5

二叉树节点

struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int x) :            val(x), left(NULL), right(NULL) {    }};

栈结构

class Solution {public:    void Mirror(TreeNode *pRoot) {        if(!pRoot) return;        stack<TreeNode*> sta;        sta.push(pRoot);        while(!sta.empty()){            TreeNode* cur=sta.top();            sta.pop();            if(cur->left||cur->right){                TreeNode* tmp=cur->left;                cur->left=cur->right;                cur->right=tmp;            }            if(cur->left) sta.push(cur->left);            if(cur->right) sta.push(cur->right);        }    }};

堆结构实现(注意堆得front结构)

class Solution {public:    void Mirror(TreeNode *pRoot) {        if(!pRoot) return;        queue<TreeNode*> que;        que.push(pRoot);        while(!que.empty()){            TreeNode* cur=que.front();            que.pop();            if(cur->left||cur->right){                TreeNode* tmp=cur->left;                cur->left=cur->right;                cur->right=tmp;            }            if(cur->left) que.push(cur->left);            if(cur->right) que.push(cur->right);        }    }};

参考别人的递归实现,如下:

class Solution {public:    void Mirror(TreeNode *pRoot) {        if(pRoot){        TreeNode *tmp = pRoot->left;        pRoot->left = pRoot->right;        pRoot->right = tmp;        Mirror(pRoot->left);        Mirror(pRoot->right);        }            return ;    }};

参考:二叉树的镜像

阅读全文
0 0
原创粉丝点击