P1305---新二叉树

简介: P1305---新二叉树

题目描述

输入一串二叉树,输出其前序遍历。

输入格式

第一行为二叉树的节点数 n。(1≤n≤26)后面 n 行,每一个字母为节点,后两个字母分别为其左右儿子。空节点用 * 表示

输出格式

二叉树的前序遍历

输入

6
abc
bdi
cj*
d**
i**
j**

输出

abdicj

思路分析:对于二叉树的存储可以有顺序和链式两种,两种各有优缺点,顺序容易查找,链式容易插入和删除.本题中,如果采用链式存储,输入一个节点组合(根左右),都需要查找根在树中的位置,而且这个题中也不能保证节点的输入按照层次/顺序输入的.(有可能输入这个节点后树中还找不到其位置,对其进行插入),可以使用顺序存储.搞两个数组,存放其左右孩子,每个节点都有一个索引为其对应.

在索引与节点对应的过程中的转换需要掌握.另外在输入时记得要存入根结点的索引,以便对其进行遍历.

参考代码

#include<bits/stdc++.h>
using namespace std;
int n,l[50],r[50],root;
string str;
void preorder(int t){
  if(t==('*'-'a')){
    return;
  }
  cout<<char('a'+t);
  preorder(l[t]);
  preorder(r[t]);
} 
int main()
{
  cin>>n;
  for(int i = 0; i < n; i++){
    cin>>str;
    if(!i){//存储下树根 
      root = str[0]-'a';
    }
    l[str[0]-'a'] = str[1] - 'a';
    r[str[0]-'a'] = str[2] - 'a';
  }
  preorder(root);
  return 0;
}
相关文章
|
6月前
|
算法
二叉树删除节点算法---递归
二叉树删除节点算法---递归
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题
先来一题简单的题目练练手,之前有提到过,二叉树的前序遍历就是通过根左右的遍历方式来进行的,所以这题总体思路也是一样.不过要说明的是,这里采用了c语言,所以输出时需要自己创建一个动态数组,每次将访问到的val存入动态数组当中即可.
59 0
|
7月前
二叉树OJ题:LeetCode--100.相同的树
二叉树OJ题:LeetCode--100.相同的树
56 0
|
存储 算法 分布式数据库
【二叉树---堆】
【二叉树---堆】
53 0
|
算法 C语言 C++
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅳ
本章依然是二叉树的刷题 忘记的朋友们可以去看看我的二叉树专题
64 0
|
存储 算法 C语言
【树】你真的会二叉树了嘛? --二叉树LeetCode专题Ⅱ
这里有两种方法(深度优先搜索与广度优先搜索)其实也就是前序遍历与层序遍历,层序遍历这里简单提一下.与上面的大同小异就不过多赘述了:依旧是遍历出每一层最大的值,将其放入数组即可.
72 0
剑指offer_二叉树---从上往下打印二叉树
剑指offer_二叉树---从上往下打印二叉树
70 0
剑指offer_二叉树---把二叉树打印成多行
剑指offer_二叉树---把二叉树打印成多行
65 0
剑指offer_二叉树---二叉树的下一节点
剑指offer_二叉树---二叉树的下一节点
71 0
剑指offer_二叉树---二叉搜索树的第k个结点
剑指offer_二叉树---二叉搜索树的第k个结点
66 0