关闭

根据输入字符建树

标签: 二叉树
716人阅读 评论(0) 收藏 举报
分类:

根据给出的字符串建树
如a(b(c,d),e(f,g))
a为根节点,b,e分别为a的左右孩子....


// build_tree.cpp : 定义控制台应用程序的入口点。
//

/*
根据给出的字符串建树
如a(b(c,d),e(f,g))
a为根节点,b,e分别为a的左右孩子....


*/


#include "stdafx.h"
#include<stack>
#include<iostream>
using namespace std;


struct biNode{
	char value;
	biNode*lNode;
	biNode*rNode;
};

biNode*root = new biNode;
//startpos为父节点binode后面紧跟的'('在字符串中的位置,endpos为'('对应的')'的位置
//递归建树
biNode*create_tree(biNode* binode,char*str,int startpos,int endpos)
{
	_ASSERT(endpos - startpos > 3);
	biNode*lnode = new biNode;
	biNode*rnode = new biNode;
	lnode->value = str[startpos + 1];
	binode->lNode = lnode;
	if (endpos - startpos == 4)
	{
		rnode->value = str[endpos-1];
		binode->rNode = rnode;
		return root;
	}
	//a(b(c,d),e(f,g))
	stack<int>aa;
	int kk = endpos - 1;
	if (str[endpos - 1] == ')')
	{
		aa.push(kk);
		--kk;

		while (!aa.empty() || (str[kk] - 'a' < 0 || str[kk] - 'z'>25))
		{
			if (str[kk] == ')')
				aa.push(kk);
			if (str[kk] == '(')
				aa.pop();
			--kk;
		}
	}
	rnode->value = str[kk];
	binode->rNode = rnode;
	//_ASSERT(str[kk - 1] = ',');
	if (str[startpos + 2] == '(')
		create_tree(lnode, str, startpos + 2, kk - 2);
	if (str[kk + 1] == '(')
		create_tree(rnode, str, kk + 1, endpos-1);

}
int _tmain(int argc, _TCHAR* argv[])
{
	char*str = "a(b(c,d),e(f,g))";
	root->value = str[0];
	create_tree(root, str, 1, 15);

	system("pause");
	return 0;
}


0
0
查看评论

二叉树遍历 ,根据先序和中序遍历序列建树

先序可以判断根 中序可以判断左右孩子 后序可以判断根 例题1.已知二叉树的先序、中序和后序序列分别如下,但其中有一些已模糊不清,试构造出该二叉树。 先序序列 _BC_EF__ 中序序列 BDE_AG_H 后序序列 _DC_GH_A 解法:后序最后一个是A,所以A是先序的第一个得到: 先序序列...
  • zxq1138634642
  • zxq1138634642
  • 2012-10-29 12:37
  • 2181

华为机试:给出一个字符串形式表达的二叉树,求出指定节点深度。

给出一个字符串形式表达的二叉树,求出指定节点深度。 输入的树形结构字符串格式为: 1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点; 2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层; 3、字符串以“节点...
  • u014616073
  • u014616073
  • 2016-03-26 15:07
  • 755

根据先序中序遍历建树【模板】

主要就是通过先序找到当前子树根节点,再用中序遍历分子树,不断递归下去。#include <iostream> #include <stdio.h> #include <cstring> #include <vector> #include <cm...
  • Scythe666
  • Scythe666
  • 2016-03-24 10:37
  • 1697

输入先序遍历序列,建树----Java实现

~U。U~古(356977819)  1:40:09 今天从C++开始转战Java,这是本人写的第一个Java程序,整了很久,期间痛苦万分,但收获良多。 程序输入一个先序遍历的序列,$表示空,根据输入建树,然后进行先序遍历并输出。 如:A B D $ $ $ C E...
  • gstc110
  • gstc110
  • 2012-05-21 01:45
  • 3485

模板-根据中序,后序建树层次遍历输出

#include #include #include #define maxn 35 using namespace std; int in[maxn],post[maxn]; struct stu { int num; stu *l,*r; }; int n; void build(stu *...
  • dtwd886
  • dtwd886
  • 2016-05-18 20:24
  • 177

【LeetCode】根据前序和中序遍历建树 && 根据中序遍历和后续遍历建树

1、Construct Binary Tree from Preorder and Inorder Traversal  Total Accepted: 7041 Total Submissions: 27696 My Submissions Given preorder and in...
  • u013027996
  • u013027996
  • 2014-04-09 11:19
  • 1182

UVa 548 - Tree 二叉树的重建——中序遍历与后续遍历进行建树

548 - Tree 4606 28.96% 974 77.21% 题目链接: http://uva.onlinejudge.org/index.php?option=com_online...
  • shuangde800
  • shuangde800
  • 2012-07-03 00:18
  • 3302

以先序字符串方式建立二叉树

原题 题目描述 输入一个二叉树的先序串,输出其后序遍历结果。如果结点的子树为空,先序串的对应位置为空格符。 输入 第1行:先序串(结点数≤26,以单个大写字母表示) 输出 第1行:后序序列 样例输入 AB C D 样例输出 CBDA 注:空格
  • C20180630
  • C20180630
  • 2017-01-20 17:28
  • 922

二叉树先序建树及先序遍历

#include   using namespace std;   int N = 0; typedef struct node   {       struct node *leftChild;      ...
  • seebetpro
  • seebetpro
  • 2016-04-19 00:34
  • 1289

先序+中序和中序+后序建树

思路:先序的第一个元素和后序的最后一个元素是当前子树的根,然后遍历中序序列,找到左右子树的分界线,递归建左子树和右子树。 class Solution { public: /*由于是oj,这里假设给的序列是合法的,正常情况是需要判断不合法情况的 */ TreeNode *build...
  • fangjian1204
  • fangjian1204
  • 2014-08-11 18:11
  • 1269
    个人资料
    • 访问:623783次
    • 积分:10517
    • 等级:
    • 排名:第1903名
    • 原创:468篇
    • 转载:61篇
    • 译文:0篇
    • 评论:65条
    最新评论