题目描述

利用先序递归遍历算法创建二叉树计算该二叉树中的空链域个数

输入

输入为接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树)。

输出

输出该用例对应的二叉树中的空链域个数。

样例输入复制

AB##C##
ABCD###EF##G###

样例输出复制

4
8
要点:二叉树中空链域个数
对一个二叉树来说,含有n个结点的二叉链表中有n+1个空链域
每一个节点有左右两个指针,n个节点共有2n个链域,
而n个节点只需用n-1个指针就可互连(因为连接n个点只需n-1条直线),
所以还剩下2n-(n-1)=n+1个
所以只需要遍历计算出二叉树的结点数再+1即可
void Area(Tree *&tree)
{
if(tree!=NULL)
{
count++;
if(tree->lchild!=NULL)
Area(tree->lchild);
if(tree->rchild!=NULL)
Area(tree->rchild);
}
}
或者
void CreateTree(Tree *&t)
{
char army;
cin>>army;
if(army=='#')
{
t=NULL;
}
else
{
k++;//直接统计输入的不为NULL的结点数
t=new Tree;
t->bts=army;
CreateTree(t->lchild);
CreateTree(t->rchild);
}
}

完整代码:

#include<iostream>
#include<malloc.h>
int count=0;
using namespace std;
typedef struct node
{
char data;
struct node *lchild,*rchild;
}Tree;
void CreateTree(Tree *&tree)
{
char ch;
cin>>ch;
if(ch=='#')
tree=NULL;
else
{
tree=(Tree*)malloc(sizeof(Tree));
tree->data=ch;
CreateTree(tree->lchild);
CreateTree(tree->rchild);
}
}
void Area(Tree *&tree)
{
if(tree!=NULL)
{
count++;
if(tree->lchild!=NULL)
Area(tree->lchild);
if(tree->rchild!=NULL)
Area(tree->rchild);
}
}
int main()
{
Tree *tree;
CreateTree(tree);
Area(tree);
cout<<count+1;
return 0;
}
 

Swust OJ977: 统计利用先序遍历创建的二叉树中的空链域个数的更多相关文章

  1. 先序遍历创建二叉树,对二叉树统计叶子节点个数和统计深度(创建二叉树时#代表空树,序列不能有误)c语言

    #include "stdio.h" #include "string.h" #include "malloc.h" #define NUL ...

  2. LeetCode---105. 从前序与中序遍历序列构造二叉树 (Medium)

    题目:105. 从前序与中序遍历序列构造二叉树 根据一棵树的前序遍历与中序遍历构造二叉树. 注意: 你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7 ...

  3. 【LeetCode】105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcod ...

  4. lintcode :前序遍历和中序遍历树构造二叉树

    解题 前序遍历和中序遍历树构造二叉树 根据前序遍历和中序遍历树构造二叉树. 样例 给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \ 1 3 注意 你可以假设树中不存 ...

  5. lintcode: 中序遍历和后序遍历树构造二叉树

    题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 /  \ 1    3 注意 你可 ...

  6. 【2】【leetcode-105,106】 从前序与中序遍历序列构造二叉树,从中序与后序遍历序列构造二叉树

    105. 从前序与中序遍历序列构造二叉树 (没思路,典型记住思路好做) 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [ ...

  7. LeetCode(105):从前序与中序遍历序列构造二叉树

    Medium! 题目描述: 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inor ...

  8. [PHP] 算法-根据前序和中序遍历结果重建二叉树的PHP实现

    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5 ...

  9. leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树

    题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  10. LintCode-72.中序遍历和后序遍历树构造二叉树

    中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: ...

随机推荐

  1. 如何把接口返回文件流读取后写入Excel

    代码: res = res.content #接口返回的内容 with open(path,mode='wb') as file: #excel的路径 file.write(res)

  2. vue-cli打包后运行报路径错误 不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错

    不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错 解决方法 新建一个 vue.config.js module.exports = { publicPath: './', config ...

  3. js已知多边形坐标点,求多边形的中心点坐标

    你需要传入的数据类型如下: // 取面对象 中心点 var calculateCenter = function (lnglatarr) { var total = lnglatarr.length; ...

  4. redis过期数据的底层存储结构

  5. python菜鸟学习: 1.用户登录输入输出

    # -*-coding: utf-8 -*-name = 'liyuzhoupan'password = '123'def login_test(): count = 0 while count &l ...

  6. 用Flask+Element+Vue搭建md5、sha加密网站

    目录 一.绘制网站页面 1.1 绘制输入框 1.2 绘制表单 二.flask后端接口 三.前后端数据交互 在本章中,我们能学到: 1.Element 中的输入框.按钮.消息提示组件的使用 2.axio ...

  7. c语言中的原子操作

    参考文章:https://blog.csdn.net/yikai2009/article/details/8650221 1. 原子操作:原子操作指的是在执行过程中不会被别的代码所中断的操作..分为 ...

  8. c++学习2 基础关键词

    三 volatile强制访问内存 在一个变量的频繁使用中,系统为了提高效率,会自动将内存里面的数据放入CPU里的寄存器里.但在某些特殊场景下,放入寄存器这个操作反倒会导致CPU无法及时获取最新的一手数 ...

  9. python扑克牌

    import random import operator def auto(): pokers=[] poker=[] for i in ['','','','']: for j in ['A',' ...

  10. GPS数据处理

    GPS数据处理 题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The Nationa ...