C++实现二叉树镜像(翻转)

时间:2015-08-12 14:52:52   收藏:0   阅读:298

描述:

        给定一个二叉树的根,将二叉树翻转


解决方案:

        前序遍历二叉树,交换左右子节点


代码示例:

#include <iostream>
#include <cstdio>
using namespace std;
class Node{
    private:
        Node* left;
        Node* right;
        int value;
    public:
        int Data(){ return value; }
        Node* Left(){ return left; }
        Node* Right(){ return right; }
        Node(int _value):value(_value){ left = NULL; right = NULL; }
        void SetLeft(Node* _left){ left = _left; }
        void SetRight(Node* _right){ right = _right; }
};
class Tree{
    public:
        Node* root;
};

//创建一颗二叉树
Node* Construct(){
    Node* n1 = new Node(1);
    Node* n2 = new Node(2);
    Node* n3 = new Node(3);
    Node* n4 = new Node(4);
    Node* n5 = new Node(5);
    n1->SetLeft(n2);
    n1->SetRight(n3);
    n3->SetLeft(n4);
    n3->SetRight(n5);
    return n1;
}

//前序递归遍历
void PreOrder(Node* root){
    if(NULL == root){
        cout << endl;
        return;
    }
    cout << root->Data() << " ";
    if(NULL != root->Left()){
        PreOrder(root->Left());
    }
    if(NULL != root->Right()){
        PreOrder(root->Right());
    }
}

//翻转
void Image(Node* root){
    if(NULL == root){
        return;
    }
    if(NULL == root->Left() && NULL == root->Right()){
        return;
    }

    /* 交换左右子树 */
    Node* temp = root->Left();
    root->SetLeft(root->Right());
    root->SetRight(temp);

    if(NULL != root->Left()){
        Image(root->Left());
    }
    if(NULL != root->Right()){
        Image(root->Right());
    }
}
int main(void){
    Node* root =  Construct();
    cout << endl;
    PreOrder(root);
    Image(root);
    cout << endl; 
    PreOrder(root);
    return 1;
}


本文出自 “迷途知返的程序猿” 博客,请务必保留此出处http://lth2015.blog.51cto.com/10613847/1683948

原文:http://lth2015.blog.51cto.com/10613847/1683948

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!