二叉树的建立与先序遍历

// -------------------------
// 二叉树的建立与先序遍历
// ------------------------

#include <iostream>
#include <malloc.h>
using namespace std;

typedef struct BiTreeNode {
 char elem;
 struct BiTreeNode *lchild, *rchild;
}BiTreeNode,*BiTree;

void CreatBiTree(BiTree &bt) {
 char ch;
 cin >> ch;
 if (ch == ‘#‘)
  bt = NULL;
 else {
  bt = new BiTreeNode;
  bt->elem = ch;
  CreatBiTree(bt->lchild);
  CreatBiTree(bt->rchild);
 }
}

void preTraverseBiTree(BiTree T) {
 if (T) {
  cout << T->elem << ",";
  preTraverseBiTree(T->lchild);
  preTraverseBiTree(T->rchild);
 }
}

int main() {
 BiTree T;

//实例输入:ab#d##c#e##
 //   输出:abdce
 CreatBiTree(T);
 cout << "\n-------------------------" << endl;
 preTraverseBiTree(T);

system("pause");
 return 0;
}

时间: 2024-10-14 05:14:14

二叉树的建立与先序遍历的相关文章

笔试算法题(36):寻找一棵二叉树中最远节点的距离 &amp; 根据二叉树的前序和后序遍历重建二叉树

出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所以计算出以每个节点为根节点的子树的最 远距离,最后取他们的最大值就是整棵树的最远距离: 如果递归层次过多造成系统栈溢出,则可以使用stack堆栈结构存储递归节点,从而使用循环实现 解题: 1 struct Node { 2 int value; 3 Node *left; 4 Node *right

栈实现二叉树的先,中,后序遍历

栈实现二叉树先,中,后序遍历 如果是使用递归来实现二叉树的先,中,后序遍历只需要更改三行代码的位置,但若是使用栈来写那便会有趣得多 根结点与其左右子树间的输出优先级 graph TD 1((根结点))---2((左子树)) 1---3((右子树)) 遍历方式 输出优先级 先序 根结点>左子树>右子树 中序 左子树>根结点>右子树 后序 左子树>右子树>根节点 使用栈的规则 栈内元素是指向结点的指针 只有栈顶元素指向的结点内容才会被输出 方便,不用记忆太多结点 结点内容输

二叉树的建立与先序,后序,中序输出

如果二叉树为: a b                                 c d                                 e 由于程序中要知道叶子结点(终点).所以要讲上面的二叉树变成扩展二叉树(把叶子结点的孩子补成#,用作标记),扩展后就变成了: a b                                 c #                  d              #                e #             #

数和二叉树——二叉树的建立及应用(遍历等)(基础篇)

二叉树:二叉树是每个结点最多有两个子树的有序树. 先来介绍一下二叉树的一些基本性质吧~ 二叉树的性质: 1.非空二叉树上叶子结点数等于双分支节点数加一. 性质1 二叉树第i层上的结点数目最多为2i-1(i≥1).证明:用数学归纳法证明:     归纳基础:i=1时,有2i-1=20=1.因为第1层上只有一个根结点,所以命题成立.    归纳假设:假设对所有的j(1≤j<i)命题成立,即第j层上至多有2j-1个结点,证明j=i时命题亦成立.    归纳步骤:根据归纳假设,第i-1层上至多有2i-2

二叉树的前中后序遍历

#include<stdio.h> #include<string.h> #include<stdlib.h> #define Size 100 #define Resize 10 typedef struct Bitnode{ //定义结点 char data; struct Bitnode *lchild,*rchild; }Bitnode,*Bitree; typedef struct Stack{ //定义栈 Bitree *base; int top; int

C语言 二叉树顺序存储结构的先序遍历算法

#include <stdio.h> #include <stdlib.h> #include <string.h> #define __MAX_LENGTH__ 20 typedef struct SqStack{//调用栈     int data[__MAX_LENGTH__];     int top; }SqStack; typedef struct SqBiTree{//顺序存储二叉树     elemType data[__MAX_LENGTH__];  

二叉树(3)----后序遍历,递归和非递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.后序遍历 定义: 给定根节点,首先遍历左子树,然后遍历右子树,最后

POJ 2255 Tree Recovery &amp;&amp; Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

链接:poj.org/problem?id=2255 题意: 分别给你一个二叉树的前序遍历序列和中序遍历序列,让你给出这个二叉树的后序遍历序列. 思路: 对于二叉树的三种遍历方式,都可以使用递归来实现,那么也一定可以使用递归来拆解,以达到从遍历序列确定二叉树具体结构的目的.对于前序遍历来说,第一个字母一定是根,并且在序列中根的左子树包含的点一定出现在根的右子树的前面.对于中序遍历序列来说,根前面出现的字母所代表的点一定出现在左子树中,根后面出现的字母所代表的点一定出现在右子树中.在根据前序与中序

二叉树(2)----中序遍历,递归和非递归实现

1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.中序遍历 定义:首先访问左子树,然后访问根节点,最后访问右子树