反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。

反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。

解析:既然不能使用递归那么可以使用栈,代码如下:

#include <iostream>
#include<stack>
#include<assert.h>
#include <tchar.h>
#include <queue>
using namespace std;  

typedef struct BinaryTreeNode
{
    int  m_nValue;
    BinaryTreeNode *m_pLeft;
    BinaryTreeNode *m_pRight;
}BinaryTreeNode ;  

//以先序的方式构建二叉树,输入-1表示结点为空
void CreateBinaryTree(BinaryTreeNode *&pRoot)
{
    int nNodeValue = 0;
    cin >> nNodeValue;
    if (-1== nNodeValue)
    {
        pRoot = NULL;
        return;
    }
    else
    {
        pRoot = new BinaryTreeNode();
        pRoot->m_nValue = nNodeValue;
        CreateBinaryTree(pRoot->m_pLeft);
        CreateBinaryTree(pRoot->m_pRight);
    }
}  

void ReserveBitree(BinaryTreeNode *pRoot)
{
	/*
	if(pRoot==NULL)
		exit(0);
	*/
	assert(pRoot!=NULL);
        stack<BinaryTreeNode *> s;
        s.push(pRoot);
        while(!s.empty())
	{
	    BinaryTreeNode * tn = s.top();
		s.pop();
		BinaryTreeNode * tmp = tn->m_pLeft;
		tn->m_pLeft= tn->m_pRight;
		tn->m_pRight= tmp;
		if(tn->m_pLeft != NULL)
			s.push(tn->m_pLeft);
		if(tn->m_pRight != NULL)
			s.push(tn->m_pRight);
	}
}

void PrintInOrder(BinaryTreeNode *pRoot)
{
    if (pRoot != NULL)
    {
        PrintInOrder(pRoot->m_pLeft);
        cout << pRoot->m_nValue << " ";
        PrintInOrder(pRoot->m_pRight);
    }
}  

int _tmain(int argc, _TCHAR* argv[])
{
    BinaryTreeNode *pRoot = NULL;
    CreateBinaryTree(pRoot);
    cout <<"中序遍历为:"<<endl;
    PrintInOrder(pRoot);
    cout << endl;
    ReserveBitree(pRoot);
    cout <<"中序遍历为:"<<endl;
    PrintInOrder(pRoot);
    cout<<endl;
    system("pause");
    return 0;
}
时间: 2024-08-03 19:42:03

反转二叉树,即交换所有结点的左右子树,但不能使用递归方法。的相关文章

交换二叉树中所有结点的左右子树的位置

#include<stdlib.h> #include<stdio.h> #include<stack> #define N 50 using namespace std; typedef struct tree{ char ch; struct tree *lchild; struct tree *rchild; }BitTree; //数组输入 BitTree *CreateTree(int A[], int i, int n){ BitTree *bt; if(i

【LeetCode-面试算法经典-Java实现】【226-Invert Binary Tree(反转二叉树)】

[226-Invert Binary Tree(反转二叉树)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 代码下载[https://github.com/Wang-Jun-Chao] 原题 Invert a binary tree. 4 / 2 7 / \ / 1 3 6 9 to 4 / 7 2 / \ / 9 6 3 1 题目大意 将一棵二叉树进行翻转. 解题思路 对每一个结点,将它的左右子树进行交换,再对它的左右子结点进行同样的操作. 代码实现 树结点类 pub

二叉树的镜像(反转二叉树)

反转二叉树----java实现 描述 实现二叉树的反转 示例: 原二叉树: 4 / 2 7 / \ / 1 3 6 9 反转后的二叉树: 4 / 7 2 / \ / 9 6 3 1 解析 递归 1.判断根是否为空,根为空直接返回根:否则继续:2.递归反转根的左右子树 非递归 1.判断根是否为空,根为空直接返回根:否则继续:2.交换根节点的左右子节点:3. 交换第二层结点的左右子树:4 重复下去,最后一个结点. 代码 递归 public TreeNode invertNode(TreeNode r

反转二叉树

输入一个二叉树,输出其镜像. 如下图,即交换所有节点的左右子树. 这里提供两种思路:使用递归和不使用递归. 使用的二叉树定义如下: public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 解决方法: import java.util.LinkedList; import java.util.Sca

leetCode题解之反转二叉树

1.题目描述 经典的反转二叉树,就是将二叉树中每个节点的左.右儿子交换. 2.题目分析 3.代码 1 TreeNode* invertTree(TreeNode* root) { 2 3 if(root == NULL ) 4 return NULL; 5 6 7 TreeNode* temp; 8 temp = root->left; 9 root->left = invertTree(root->right); 10 root->right = invertTree(temp)

题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。

题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点.链表结点定义如下: struct ListNode { int       m_nKey; ListNode* m_pNext; }; c语言实现 /* File : rlink.c Author : Date : 2015/4/4 platform : windows7 x86_64 version : 1.0 Function : 反转一个链表 */ #include <stdio.h> #include <stdli

《剑指offer》:[58]二叉树的下一个结点

题目:给定一棵二叉树和其中一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针外,还有一个指向父节点的指针. 分析:这里已经说了是中序遍历,所以我们就以中序遍历为例.由于是二叉树,所以有三种情况: (1)如果如果一个结点有右子树,那么它的下一个结点就是它的右子树中最左子节点.也就是说从右子节点出发一直沿着指向左子结点的指针,我们就能找到它的 下一个结点. (2)如果这个结点没有右子树,如果结点是它父节点的左子树,则它的下一个结点就是它的父节点. (3)如果一个

二叉树的下一个结点-剑指Offer

二叉树的下一个结点 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路 当该结点有右子树时,下一个结点就是右子树中最左的那个结点 当该结点没有右子树,而且是父节点的左子树,那下一个结点就是父节点 当该结点没有右子树,而且是父节点的右子树,那就向上寻找直到是某个父节点的左子树,然后改父节点就是下一个结点,如果找到根节点还没有找到满足条件的父节点,那就是没有下一个结点 代码 /* public cla

二叉树中两个结点最近的公共祖先汇总

一.若二叉树为搜索二叉树 原题链接:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/#/description Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the definition of LCA on