码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-12 14:54:09      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:二叉树翻转 二叉树镜像 c++ 二叉树

描述:

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


解决方案:

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


代码示例:

#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

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

标签:二叉树翻转 二叉树镜像 c++ 二叉树

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!