算法习题15:二叉树镜像(翻转)
来源:互联网 发布:类似sai mac 编辑:程序博客网 时间:2024/06/07 01:16
题目:输入一颗二元查找树,将该树转换为它的镜像,
即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
用递归和循环两种方法完成树的镜像转换。
例如输入:
8
/ \
6 10
/\ /\
5 7 9 11
输出:
8
/ \
10 6
/\ /\
11 9 7 5
定义二元查找树的结点为:
struct BSTreeNode // a node in the binary search tree (BST)
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
};
----------------------------------
今天这两道题相对来说还是比较简单,怪不得连答案都没咯
镜像,就是交换左右子树,正如我前面题目里遇到的一样,二叉树这种问题最便捷的就是回归到递归遍历问题上,这样解题就思路开阔了
//============================================================================// Name : RevertBT.cpp// Author : YLF// Version :// Copyright : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include <iostream>using namespace std;struct BSTreeNode // a node in the binary search tree (BST){ int m_nValue; // value of node BSTreeNode *m_pLeft; // left child of node BSTreeNode *m_pRight; // right child of node};void addNode(BSTreeNode* &p, int value);void printLDR(BSTreeNode* p);void Mirror(BSTreeNode* p);int main() {BSTreeNode *head = NULL;int input = 0;while(true){cin>>input;if(input != -1)addNode(head, input);elsebreak;}printLDR(head);cout<<endl;Mirror(head);printLDR(head);return 0;}void addNode(BSTreeNode* &p, int value){if(p == NULL){BSTreeNode* temp = new BSTreeNode();temp->m_nValue = value;temp->m_pLeft = NULL;temp->m_pRight = NULL;p = temp;}else{if(value < p->m_nValue)addNode(p->m_pLeft, value);else{addNode(p->m_pRight, value);}}}/* * 翻转镜像 */void Mirror(BSTreeNode* p){if(p == NULL)return;//先镜像BSTreeNode* temp = p->m_pLeft;p->m_pLeft = p->m_pRight;p->m_pRight = temp;//再遍历Mirror(p->m_pLeft);Mirror(p->m_pRight);}/* * 中序遍历 */void printLDR(BSTreeNode* p){if(p == NULL)return;printLDR(p->m_pLeft);cout<<p->m_nValue<<" ";printLDR(p->m_pRight);}
- 算法习题15:二叉树镜像(翻转)
- 算法习题13:翻转链表
- 二叉查找树镜像翻转
- 将二叉树镜像翻转
- 算法题:lintcode#175 翻转二叉树(java)
- 算法学习-二叉树的翻转
- 经典算法学习——交换二叉树的左右子树(二叉树的翻转)
- 翻转二叉树(C++)
- 算法习题10:翻转句子中单词的顺序
- 算法习题39:二叉树节点距离
- 翻转二叉树(Invert Binary Tree)
- Invert Binary Tree(翻转二叉树)
- LintCode--翻转二叉树(非递归)
- 翻转二叉树(递归非递归)
- 翻转二叉树(leetcode-226)
- 循环移位(翻转算法)
- 算法导论 习题10.4-5 二叉树的遍历(非递归,O(1)存储)
- 数据结构与算法(18)——二叉树习题一
- 清空Activti脚本
- DAO和Service层的一些理解
- struts2的ognl
- AsyncTask的基本用法
- linux用户空间内存管理:内存映射和需求分页(缺页中断)
- 算法习题15:二叉树镜像(翻转)
- 几种内存操作性能比较
- glibc 中内存操作函数总结
- post和get的区别
- Memory leak in backtrace call?
- Documentationsecuritykeys-ecryptfs.txt
- ORA-28000: the account is locked-的解决办法
- Unix/Linux 系统自动化管理: 内存管理篇
- 17.4.2 使用DatagramSocket发送、接收数据 #知识库