1. 程式人生 > >二叉樹 二叉樹帶虛結點表示的先序遍歷可以確定唯一一顆二叉樹

二叉樹 二叉樹帶虛結點表示的先序遍歷可以確定唯一一顆二叉樹

二叉樹模版變形

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<queue>
using namespace std;
typedef struct BiTNode{
    char data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int z=0;                                //***
int CreateBiTree(BiTree &T,char *m)
{
    char data;
    data=*(m+z);
    z++;                            //***
    if(data=='#')
        T=NULL;
    else
    {
        T=(BiTree)malloc(sizeof(BiTNode));
        T->data=data;
        CreateBiTree(T->lchild,m); //*
        CreateBiTree(T->rchild,m);
    }
    return 0;
}
void Visit(BiTree T)
{
    if(T->data!='#')
        printf("%c",T->data);
}
void InOrder(BiTree T)
{
    if(T!=NULL)
    {
        InOrder(T->lchild);
        Visit(T);
        InOrder(T->rchild);
    }

}
void PostOrder(BiTree T)
{
    if(T!=NULL)
    {
        PostOrder(T->lchild);
        PostOrder(T->rchild);
        Visit(T);
    }
}
void LevelOrder(BiTree T)
{
    BiTree p=T;
    queue<BiTree> que;
    que.push(p);
    while(que.empty()!=1)
    {
        p=que.front();
        printf("%c",p->data);
        que.pop();
        if(p->lchild!=NULL)
            que.push(p->lchild);
        if(p->rchild!=NULL)
            que.push(p->rchild);
    }
}
int main()
{
    BiTree T;
    char s[2050];
    int i,len;
    while(gets(s)!=NULL)
    {
        len=strlen(s);
        for(i=0;i<=len-1;i++)
            if(s[i]!='#')
                break;
        if(i==len){
            printf("\n");
            continue;
        }
        CreateBiTree(T,s);
        InOrder(T);
        printf("%c",32);
        PostOrder(T);
        printf("%c",32);
        LevelOrder(T);
        printf("\n");
        z=0;                //***
    }
    return 0;
}


相關推薦

結點表示可以確定唯一

二叉樹模版變形 #include <iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<queue> using

根據的中序列和後續序列還原

 資料結構作業 採用C++完成 /**題目要求 已知二叉樹的中序遍歷序列 char ino[]以及後序遍歷序列char pst[],請用演算法生成該二叉樹(用二叉連結串列的形式儲存)*/ #include<stdio.h> #include<stdlib.

給出兩種序列(含中)建立

#include <iostream> #include <cstdio> #include <queue> #include <stack> #include <cstring> using namespace

七:重建(依據(或者後)和中重建

off 相同 tree int roo 節點 先序 throw -a 對於一顆二叉樹。能夠依據先序遍歷(或者後序遍歷)和中序遍歷(樹中不含反復的數字)又一次還原出二叉樹。 解析: 1. 先序遍歷序列的第一個元素必然是根節點,能夠由此獲取二叉樹的根節點。 2. 依

已知序列和中序列,輸出該的後序列

iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的

Python實現的非遞歸

結果 leetcode logs [] 列表 遍歷 不存在 preorder bin 思路: 1. 使用列表保存結果; 2. 使用棧(列表實現)存儲結點; 3. 當根結點存在,保存結果,根結點入棧; 4. 將根結點指向左子樹; 5. 根結點不存在,棧頂元素出棧,並將根結點指

、中和後

二叉樹 com size 基本 html 後序 href col spa 轉自:https://www.cnblogs.com/polly333/p/4740355.html 基本思想>>   先序遍歷:根——>左——>右   先序遍歷:左——>

c語言實現 非遞歸

停止 數據 節點 一個 null front getchar() getc 輸入 1 #include<stdio.h> 2 #include<conio.h> 3 #include<malloc.h> 4 typedef ch

144. Binary Tree Preorder Traversal

reorder oot rec eno right table self. 先序遍歷 self Given a binary tree, return the preorder traversal of its nodes‘ values. For example: Giv

非遞歸

.com dsr 遍歷二叉樹 PV 二叉 IE com weibo href 148zoolv09站涯嗣撐咨詬娜籽贅狗《http://weibo.com/p/230927988128421785640960》 lwberedhgq媳倭辛懈偕嶄漣章皇野《http://wei

(非遞歸)

for fin light list 先序 int eno 遞歸 none 二叉樹的先序遍歷(非遞歸)特別簡單 直接上代碼,根節點先入棧,然後循環棧不為空,pop出來後讓右節點和左節點分別入棧 # Definition for a binary tree node. #

棧實現非遞迴

#include "stdio.h" #include "stdlib.h" typedef struct TreeNode *Tree; typedef char ElementType; typedef struct stack *Stack; typedef Tree

(拼多多筆試演算法)根據的前和中確定的兩種思路

根據二叉樹的前序遍歷和中序遍歷確定後序遍歷 輸入:第一行:結點數目 第二行:前序遍歷陣列 第三行:中序遍歷陣列 輸出 :後序遍歷陣列 例如:第一行:7 第二行:6 4 2 5 3 1 7 第三行:4 2 5 6 1 3 7 輸出 :5 2 4 1 7 3 6 我思

資料結構 筆記-6 的非遞迴

如下這棵二叉樹的先序遍歷結果為:ABDEFPC 針對於上面的這棵二叉樹,結合程式碼,講述遍歷過程: #include <stdio.h>#include <malloc.h> //#define ElemType

建立、、中、後深度

一、概念:         二叉樹遍歷:按指定的某條搜尋路徑訪問樹中每個結點,使得每個結點均被訪問一次,而且僅被訪問一次。         根節點N,按照先遍歷左子樹L再遍歷右子樹R的原則,常見的有三種:先

和中序列建立——

Description 按先序順序和中序順序輸入二叉樹的2個遍歷序列,採用二叉連結串列建立該二叉樹並用後序遍歷順序輸出該二叉樹的後序遍歷序列。 Input 輸入資料有多組,對於每組測試資料 第一行輸入二叉樹的先序序列,第二行為中序序列。 Output 對於每組測試資料輸出該二叉樹

已知和中畫出該

對一棵二叉樹進行遍歷,我們可以採取3中順序進行遍歷,分別是前序遍歷、中序遍歷和後序遍歷。 這三種方式是以訪問父節點的順序來進行命名的。 假設父節點是N,左節點是L,右節點是R,那麼對應的訪問遍歷順序如下: 前序遍歷    N->L->R 中序遍歷  

第六章作業1—--計算機17級 7-1 根據後和中輸出 (25 分)

7-1 根據後序和中序遍歷輸出先序遍歷 (25 分) 本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。 輸入格式: 第一行給出正整數N(≤30),是樹中結點的個數。隨後兩行,每行給出N個整數,分別對應後序遍歷和中序遍歷結果,數字間以空

Leetcode:144.

給定一個二叉樹,返回它的 前序 遍歷。  示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,2,3] 解題思路: 先序遍歷:1.訪問根節點。2.訪問左子樹。3.訪問右子樹。

-遞迴和非遞迴演算法

需要實踐先序遍歷,我們先建立二叉樹。這裡採用先序序列建立二叉樹,不為別的,因為簡單。 typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild, *rchild; }*BiTre