#include <iostream>
#include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &i, int len)
// 利用先序遍历创建二叉树
// 参数:先序遍历字符串s,字符串初始下标i=0,字符串长度len。
// 返回:二叉树
{BiTreeNode* root;char item = s[i++];if(i>=len || item=='#'){root=NULL;}else{root = new BiTreeNode(item);root->left = CreatBiTree(s, i, len);root->right = CreatBiTree(s, i, len);}return root;
}int main(int argc, const char * argv[]) {// insert code here...//std::cout << "Hello, World!\n";char str[200];scanf("%s", str);int i = 0;int len = int(strlen(str));BiTreeNode* root = CreatBiTree(str, i, len);root = BiTreeChange(root);PreOrder(root);return 0;
}

#ifndef binary_tree_h
#define binary_tree_h#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;struct BiTreeNode {char data;              //  树节点元素BiTreeNode* left;       //  左子树指针BiTreeNode* right;      //  右子树指针BiTreeNode(){           //  树节点初始化left=NULL;right=NULL;}BiTreeNode(char item){  //  用元素初始化树节点data=item;left=NULL;right=NULL;}~BiTreeNode(){          //  释放树节点内存left=NULL;right=NULL;}
};BiTreeNode* CreatBiTree(char* s, int &i, int len);
// 利用先序遍历创建二叉树
// 参数:先序遍历字符串s,字符串初始下标i=0,字符串长度len。
// 返回:二叉树BiTreeNode* BiTreeChange(BiTreeNode* root);
// 实现二叉树左右子树的交换(递归法)
// 参数:二叉树根节点root
// 返回:二叉树void PreOrder(BiTreeNode* root);
// 二叉树的前序遍历
// 参数:二叉树根节点root
// 输出:二叉树的前序遍历,中间没有空格,末尾不换行。#endif
#include "binary_tree.h"
#include<bits/stdc++.h>BiTreeNode* BiTreeChange(BiTreeNode* root)
// 实现二叉树左右子树的交换(递归法)
// 参数:二叉树根节点root
// 返回:二叉树
{if(root==NULL)return NULL;BiTreeNode*temp=root->left;root->left=root->right;root->right=temp;if(root->left!=NULL){BiTreeChange(root->left);}if(root->right!=NULL){BiTreeChange(root->right);}return root;}void PreOrder(BiTreeNode* root)
// 二叉树的前序遍历
// 参数:二叉树根节点root
// 输出:二叉树的前序遍历,中间没有空格,末尾不换行。
{if(root==NULL){return ;}cout<<root->data;if(root->left!=NULL){PreOrder(root->left);}if(root->right!=NULL){PreOrder(root->right);}}

第3关:递归实现二叉树左右子树交换相关推荐

  1. 第4关:非递归实现二叉树左右子树交换

    #include <iostream> #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &am ...

  2. Java交换二叉树的左右子树_二叉树左右子树交换

    1. 递归 2. 栈 package org.skyeye.test; import java.util.Stack; public class TreeSwap { public static cl ...

  3. [Java]将二叉树的左右子树交换 非递归实现

    [java] view plaincopy package dataStruct; import java.util.Stack; /** * 将二叉树的左右子树交换 非递归实现 * @author  ...

  4. c++ 数据结构——二叉树的构建及其应用,实现左右子树交换并输出前序递归结果

    数据结构实习--二叉树及其应用 一.实习题目及要求 1.题目: 二叉树基本算法的实现 2.功能要求: (1)键盘输入二叉树结点前序序列,创建一棵二叉树: (2)实现SwapTree方法,以根结点为参数 ...

  5. 递归构造二叉树和二叉树的遍历

    学习递归构造二叉树,并且进行前序遍历. 前序遍历,中序遍历和后序遍历是什么? 遍历的顺序分别如下: 前序遍历:根节点,左子树,右子树: 中序遍历:左子树,根节点,右子树: 后序遍历:左子树,右子树,根 ...

  6. python 递归遍历二叉树

    python 递归遍历二叉树 我确定很多人不能真正的理解二叉树-- class Node: def __init__(self,value=0,left=0,right=0): self.value= ...

  7. 【转】更简单的非递归遍历二叉树的方法

    [转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...

  8. ZOJ3805Machine(二叉树左右子树变换)

    1 /* 2 题意:建立一棵二叉树,左子树和父节点占一个宽度,右子树另外占一个宽度! 3 使任意左右子树交换顺序,使得整个树的宽度最小! 4 思路:递归交换左右子树 ! 开始写的代码复杂了,其实左右子 ...

  9. java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...

    224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...

最新文章

  1. 16_python_面向对象
  2. CMU赵越:异常检测的算法、案例和落地
  3. java 打包目录_Java打包文件目录问 zip文件
  4. 网络公司如何快速获取网站关键词流量
  5. [bzoj1059]矩阵游戏
  6. PHP5时间相差八小时问题[三种方法]
  7. 浅谈三角带的使用及其分类
  8. C#编程(四十)----------运算符重载
  9. 分布式MySQL集群方案,看看京东是怎么做的
  10. andrioid 图像视频处理
  11. 诺禾--分子生物学常用小软件分享
  12. 泛微oa系统手机服务器,泛微OA系统移动客服,把客户的所有事宜装入手机
  13. pyHook pyHook3 区别_“get+过去分词”表被动语态与系表结构的三大区别及四大特点...
  14. 经典vim插件功能说明、安装方法和使用方法介绍
  15. RAM与ROM的特点和区别
  16. Google学术搜索镜像网站搜集
  17. 计算机思维培训心得,2020参加计算机培训心得体会精选
  18. md格式 linux,Linux命令基本格式以及文件处理命令.md
  19. 最近ChatGPT封号太严重了,这里是解封攻略步骤(建议收藏)
  20. 【工作】引用文献(医学文献注意事项)

热门文章

  1. Java程序流程控制(顺序结构、分支结构、循环结构、if-else、switch-case、for、while、do-while、break、continue、return)
  2. Django博客系统(评论模型)
  3. Python给数字前固定位数加零或数字前置保留0
  4. 【网络协议】TCP分段与IP分片
  5. python报错 ValueError: dictionary update sequence element #0 has length 1; 2 is require
  6. 什么是近似算法?它适用于哪些问题?这篇文章给你答案
  7. 手把手教你实现GAN半监督学习
  8. 大数据背后的神秘定理:贝叶斯公式
  9. 百度提出PADDLESEG:一个高效的图像分割开发工具
  10. Windows10+Virtual box+ubuntu17.10