用循环的方法实现二叉树的镜像

程序中包含了递归方法 和循环方法
#include <iostream>
#include <queue>
using namespace std;
struct tree
{
	int value;
	tree *left;
	tree *right;
};
tree *create()
{
	int n;
	cin>>n;
	if (n == 0)
	{
		return NULL;
	}
	else
	{
		tree *root = new tree;
		root->value = n;
		root->left = create();
		root->right = create();
		return root;
	}

}
void pre(tree *root)
{
	if (root == NULL)
	{
		return;
	}
	else
	{
		cout<<root->value<<" ";
		pre(root->left);
		pre(root->right);
	}
}
void mirror_digui(tree *root)
{
	if (root == NULL || (root->left==NULL && root->right==NULL))
	{
		return ;
	}
	tree *temp = root->left;
	root->left = root->right;
	root->right = temp;
	if (root->left != NULL)
	{
		mirror_digui(root->left);
	}
	if (root->right != NULL)
	{
		mirror_digui(root->right);
	}

}
void mirror_xunhuan(tree *root)
{
	if (root == NULL || (root->left==NULL && root->right==NULL))
	{
		return ;
	}
	queue<tree *> q;
	q.push(root);
	while(!q.empty())
	{
		tree *newroot = q.front();
		q.pop();
		tree *temp = newroot->left;
		newroot->left = newroot->right;
		newroot->right = temp;
		if (newroot->left!=NULL)
		{
			q.push(newroot->left);
		}
		if (newroot->right!=NULL)
		{
			q.push(newroot->right);
		}

	}
}
int main()
{
	tree *root = create();
	pre(root);
	cout<<endl;
	mirror_xunhuan(root);
	pre(root);

	return 0;

}

用循环的方法实现二叉树的镜像

时间: 2024-12-29 05:24:54

用循环的方法实现二叉树的镜像的相关文章

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析:

剑指offer18:操作给定的二叉树,将其变换为源二叉树的镜像。

1 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 2 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 3 思路和方法 (1)递归思想,先交换根节点的左右子树的位置,然后向下递归,把左右子树的根节点作为下次循环的根节点. (2)非递归:所以我们可以采用前序遍历的方法进行操作,每当遇到一个结点的时候,首先判断其是否有左右孩子(有其中之一即可),如果有的话,就交换其左右孩子,然后继续遍历其左右

【剑指offer】二叉树的镜像

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25915971 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号).接下来一行有n个数字,代表第i个二叉树节点的元素的值.接下来有n行,每行有一个字母Ci.Ci='d'表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号.C

C++算法之 判断是否为平衡二叉树 求二叉树的镜像

1:判断是否为平衡二叉树: //方法1: int TreeDepth(BTree* pRoot) { if (pRoot == NULL) return 0; int nLeftDepth = TreeDepth(pRoot->m_pLeft); int nRightDepth = TreeDepth(pRoot->m_pRight); return (nLeftDepth > nRightDepth)? (nLeftDepth+1):(nRightDepth+1); } bool Is

剑指offer(三十四)之二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 代码1: 采用递归的方法,递归深度大时内存容易爆掉 <span style="font-size:18px;">/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = n

18 二叉树的镜像

题目描述:操作给定的二叉树,将其变换为源二叉树的镜像. 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 1 /** 2 public class TreeNode { 3 int val = 0; 4 TreeNode left = null; 5 TreeNode right = null; 6 public TreeNode(int val) { 7 this.val = val; 8 } 9 } 10

剑指offer二叉树的镜像python

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 思路 用递归的方法,根节点不变,左子右子交换即可,然后分别递归左右子 代码 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.rig

二叉树的镜像

什么是二叉树的镜像呢? 我们可以自己画一颗二叉树.然后根据照镜子画出它的镜像. 如: 我们不能一次得到二叉树的镜像,要想得到一颗二叉树的镜像,有以下几个步骤: (1)先交换根的左子树和右子树 (2)交换6的左子树和右子树                      (3)交换10的左子树和右子树 得出以上规律后,就可以写代码喽: class BinaryTreeNode { public: BinaryTreeNode(const T& data) :_data(data) ,_left(NULL

非递归的方法遍历二叉树

//非递归遍历一棵树 需要借助栈 #include<stdio.h> #include<stdlib.h> struct Tree { int nValue; Tree *pLeft; Tree *pRight; }; struct Stack { Tree *root; Stack *pNext; }; Stack *pStack = NULL; void push(Tree *root) { Stack *temp = (Stack*)malloc(sizeof(Stack))