第3关:递归实现二叉树左右子树交换
#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关:递归实现二叉树左右子树交换相关推荐
- 第4关:非递归实现二叉树左右子树交换
#include <iostream> #include "binary_tree.h"BiTreeNode* CreatBiTree(char* s, int &am ...
- Java交换二叉树的左右子树_二叉树左右子树交换
1. 递归 2. 栈 package org.skyeye.test; import java.util.Stack; public class TreeSwap { public static cl ...
- [Java]将二叉树的左右子树交换 非递归实现
[java] view plaincopy package dataStruct; import java.util.Stack; /** * 将二叉树的左右子树交换 非递归实现 * @author ...
- c++ 数据结构——二叉树的构建及其应用,实现左右子树交换并输出前序递归结果
数据结构实习--二叉树及其应用 一.实习题目及要求 1.题目: 二叉树基本算法的实现 2.功能要求: (1)键盘输入二叉树结点前序序列,创建一棵二叉树: (2)实现SwapTree方法,以根结点为参数 ...
- 递归构造二叉树和二叉树的遍历
学习递归构造二叉树,并且进行前序遍历. 前序遍历,中序遍历和后序遍历是什么? 遍历的顺序分别如下: 前序遍历:根节点,左子树,右子树: 中序遍历:左子树,根节点,右子树: 后序遍历:左子树,右子树,根 ...
- python 递归遍历二叉树
python 递归遍历二叉树 我确定很多人不能真正的理解二叉树-- class Node: def __init__(self,value=0,left=0,right=0): self.value= ...
- 【转】更简单的非递归遍历二叉树的方法
[转]更简单的非递归遍历二叉树的方法 解决二叉树的很多问题的方案都是基于对二叉树的遍历.遍历二叉树的前序,中序,后序三大方法算是计算机科班学生必写代码了.其递归遍历是人人都能信手拈来,可是在手生时写出 ...
- ZOJ3805Machine(二叉树左右子树变换)
1 /* 2 题意:建立一棵二叉树,左子树和父节点占一个宽度,右子树另外占一个宽度! 3 使任意左右子树交换顺序,使得整个树的宽度最小! 4 思路:递归交换左右子树 ! 开始写的代码复杂了,其实左右子 ...
- java中二叉树_Java工程师面试1000题224-递归非递归实现二叉树前、中、后序遍历...
224.使用递归和非递归实现二叉树的前.中.后序遍历 使用递归来实现二叉树的前.中.后序遍历比较简单,直接给出代码,我们重点讨论非递归的实现. class Node { public int valu ...
最新文章
- 16_python_面向对象
- CMU赵越:异常检测的算法、案例和落地
- java 打包目录_Java打包文件目录问 zip文件
- 网络公司如何快速获取网站关键词流量
- [bzoj1059]矩阵游戏
- PHP5时间相差八小时问题[三种方法]
- 浅谈三角带的使用及其分类
- C#编程(四十)----------运算符重载
- 分布式MySQL集群方案,看看京东是怎么做的
- andrioid 图像视频处理
- 诺禾--分子生物学常用小软件分享
- 泛微oa系统手机服务器,泛微OA系统移动客服,把客户的所有事宜装入手机
- pyHook pyHook3 区别_“get+过去分词”表被动语态与系表结构的三大区别及四大特点...
- 经典vim插件功能说明、安装方法和使用方法介绍
- RAM与ROM的特点和区别
- Google学术搜索镜像网站搜集
- 计算机思维培训心得,2020参加计算机培训心得体会精选
- md格式 linux,Linux命令基本格式以及文件处理命令.md
- 最近ChatGPT封号太严重了,这里是解封攻略步骤(建议收藏)
- 【工作】引用文献(医学文献注意事项)
热门文章
- Java程序流程控制(顺序结构、分支结构、循环结构、if-else、switch-case、for、while、do-while、break、continue、return)
- Django博客系统(评论模型)
- Python给数字前固定位数加零或数字前置保留0
- 【网络协议】TCP分段与IP分片
- python报错 ValueError: dictionary update sequence element #0 has length 1; 2 is require
- 什么是近似算法?它适用于哪些问题?这篇文章给你答案
- 手把手教你实现GAN半监督学习
- 大数据背后的神秘定理:贝叶斯公式
- 百度提出PADDLESEG:一个高效的图像分割开发工具
- Windows10+Virtual box+ubuntu17.10