1. 程式人生 > >簡單二叉樹的建立和遍歷

簡單二叉樹的建立和遍歷

#include<stdio.h>
#include<stdlib.h>

//定義節點
typedef struct BiNode{
        char data;
        struct BiNode *lch;
        struct BiNode *rch;
}BiNode,*BiTree;

//先序建立二叉樹
void Create(BiTree &T)
{
        T =(BiNode*) malloc (sizeof(BiNode));

        printf("Enter the data \n");
        scanf(" %c",&T->data);
        if(T->data=='#') T = NULL;
        if(T){
                Create(T->lch);
                Create(T->rch);
        }
}

//先序遍歷
void Preorder (BiTree T)
{
   if (T) {
      printf(" %c",T->data);   // 訪問根結點

      Preorder(T->lch); // 遍歷左子樹
      Preorder(T->rch);// 遍歷右子樹
   }
}

//中序遍歷
void Inorder (BiTree T)
{
     if(T) {
       Inorder(T->lch);

       printf(" %c",T->data);

       Inorder(T->rch);
       }
}

//後序遍歷
void Postorder (BiTree T)
{
     if(T) {
       Postorder(T->lch);
       Postorder(T->rch);

       printf(" %c",T->data);
     }
}

//求二叉樹深度
int TreeDepth(BiTree T)
{
    int left=0;
    int right=0;
    if(T)
    {
        left=1+Treedepth(T->lch);
        right=1+Treedepth(T->rch);
        return left>right?left:right;
    }
    return 0;
}

int main()
{
    //先序建立二叉樹
    printf("The fuction Create() is called.\n");
    BiTree T;
    Create(T);

    //三種遍歷遞迴演算法
    printf("\n");
    printf("先序遍歷二叉樹.\n");
    Preorder(T);

    printf("\n");
    printf("中序遍歷二叉樹.\n");
    Inorder(T);

    printf("\n");
    printf("後序遍歷二叉樹\n");
    Postorder(T);
    
    printf("二叉樹深度:%d\n",TreeDepth(T));
    printf("\n");
    return 0;

}

測試資料依次輸入1,2,4,#,#,5,#,#,3,#,#(無,)
先序遍歷輸出:1,2,4,5,3
中序遍歷輸出:4,2,5,1,3
後序遍歷輸出:4,5,2,3,1
二叉樹深度:3

原連結:https://www.oschina.net/code/snippet_103214_1381

相關推薦

建立

mil inorder 推斷 microsoft con 是否 font pac node 二叉樹創建遍歷規則: 1.先序:根-左-右 2.中序:左-根-右 3.後序:左-右-根 二叉樹定義和輔助函數例如以下: struct node {

遞迴建立及深度計算

上篇咱們說到二叉樹的一種建立方法及三種遍歷方法的遞迴非遞迴演算法。這篇換了一種新的建立方法,用先根遍歷遞迴的思路建立二叉樹,用遞迴的方法計算深度,用中根遞迴和非遞迴方法遍歷整個二叉樹。 BinaryTree.h //二叉樹的建立和遍歷 #ifndef BINARYTREE_

建立以及(遞迴非遞迴方式)

#include <iostream> #include <assert.h> #include <stack> using namespace std; typedef struct biTreeNode { c

建立(類)

程式碼: #include<iostream> #include<queue> using namespace std; //建立節點 struct Tnode { char data;//資料域 Tnode *rchild;//右孩子 Tno

建立、求深度--C語言實現

#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int ElemType; //資料型別 typedef int Status; //返回值型別

C++ 建立

#include<iostream> using namespace std; struct bitNode { char data; bitNode *lchild, *rchild

C++建立

注意:二叉樹建立時要用指標的引用,詳解參考:#include <iostream> using namespace std; struct BiNode { char data; BiNode *lchild, *rchild; }; void Creat

Java 實現插入

定義節點類 package com.drj.tree; /** * * @ClassName: TreeNode * @Description:TODO(代表樹節點) * @author: drj * @date: 2018年8月22日

建立(前序,中序,後序),求葉節點個數,求節點個數

二叉樹是筆試面試中考試最頻繁的資料結構之一,主要包括,程式建立一個二叉樹,三種次序遍歷二叉樹,返回葉子節點的數目,求二叉樹節點的總數等。建立一個二叉樹節點的資料結構 typedef struct Node {int data;struct Node *left,*right

資料結構實驗-C語言-二叉樹建立,前、中、後序遍歷的遞迴演算法非遞迴演算法,求葉子結點數目,求二叉樹深度,判斷二叉樹是否相似,求二叉樹左右子互換,二叉樹層序遍歷的演算法,判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

(1)建立二叉樹二叉連結串列。 (2)寫出對用二叉連結串列儲存的二叉樹進行先序、中序後序遍歷的遞迴非遞迴演算法。 (3)寫出對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。 (4)求二叉樹的所有葉子及結點總數。

(1)建立二叉樹的二叉連結串列。 (2)寫出對用二叉連結串列儲存的二叉樹進行先序、中序和後序遍歷的遞迴和非遞迴演算法。 (3)寫出對用二叉連結串列儲存的二叉樹進行層次遍歷演算法。(4)求二叉樹的所有葉子及結點總數。 include<stdio.h> #inclu

先序、中序後序

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

數據結構35:前序、中序後序

tdi 代碼 nod 完成 循環 同時 reat pan 設置 遞歸算法底層的實現使用的是棧存儲結構,所以可以直接使用棧寫出相應的非遞歸算法。 先序遍歷的非遞歸算法 從樹的根結點出發,遍歷左孩子的同時,先將每個結點的右孩子壓棧。當遇到結點沒有左孩子的時候,取棧頂的右

深度優先廣度優先

因此 怎麽 code ron inf 技術 廣度優先搜索 二叉樹的遍歷 eat 對於一顆二叉樹,深度優先搜索(Depth First Search)是沿著樹的深度遍歷樹的節點,盡可能深的搜索樹的分支。以上面二叉樹為例,深度優先搜索的順序為:ABDECFG。怎麽實現這個順序

【資料結構週週練】012 利用佇列非遞迴演算法實現的層次

一、前言 二叉樹的遍歷是比較多樣化的遍歷,有很多種遍歷方式,先序遍歷,中序遍歷,後序遍歷,層次遍歷等等。本次給大家講的是層次遍歷,為了方便,我將題目中的資料改為編號,從左往右,從上往下依次遍歷。方便大家看到結果。 二、題目 將下圖用二叉樹存入,並通過層次遍歷方式,自上而下,從左往右對

中序、後序層序非遞迴實現

一、中序遍歷 訪問順序:左子樹 -> 結點 -> 右子樹 難點在於訪問左子樹後應該怎麼回到結點本身或者其右子樹呢?這裡利用了堆疊來臨時儲存,需要利用上一個結點時可以pop出來(有種撤回鍵的感覺2333)。 void PreOrderTravel(BinTree BT){

3——各種輸出

程式碼輸出結果如下: 二叉樹 bt:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I))) ***層次遍歷序列:A B C D E F G H I J K L M N 先序遍歷序列: 遞迴演算法:A B D E H J K L M N C F G I 非遞迴演算法:A B

【LeetCode 簡單題】21-的層次 II

宣告: 今天是第21道題。給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,

中序(遞迴非遞迴)演算法及C語言實現

二叉樹中序遍歷的實現思想是: 訪問當前節點的左子樹; 訪問根節點; 訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用中序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 遍歷節點 1 的左子樹,找到節點 2; 遍歷節點 2 的左子樹,找到節點 4;

根據前序中序序列求解後序的演算法

問題模型:已知某二叉樹前序遍歷序列為1,2,3,4,5,6,中序遍歷為3,2,4,1,6,5,設計程式計算後序序列。 關於這個問題你可以通過前序遍歷和中序遍歷建立一顆樹,然後通過後序遍歷進行求解,當然還可以直接根據已知兩序列直接推理後序序列,本文將對這種分析進行介紹。 利用