黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 數據結構二叉樹遍歷類型

數據結構二叉樹遍歷類型

更新時間:2022-03-29 11:23:22 來源:動力節點 瀏覽1138次

二叉樹的遍歷分為三種:

中序樹遍歷

前序樹遍歷

后序樹遍歷

中序樹遍歷

在這種遍歷策略中,首先訪問左子樹,然后是根,最后是右子樹。請始終牢記,任何節點都可能是其自身的子樹。按順序遍歷二叉樹的輸出產生按升序排序的鍵值。

讓我們為二叉樹的中序遍歷編寫一個基本的 C 程序。

//二叉搜索樹中序遍歷的C程序     
#include<stdio.h>  
#include<stdlib.h>    
結構 節點  
{  
    整數 鍵;  
    結構 節點*左;  
    結構 節點*對;  
};    
//返回具有給定值的新節點  
結構 節點 *getNode( int  val)  
{  
    結構 節點 *newNode;    
    newNode = malloc( sizeof ( struct  node));    
    newNode->key = val;  
    新節點->左= NULL;  
    新節點->右=空;    
    返回 新節點;  
}    
//在二叉搜索樹中插入節點  
結構 節點*插入節點(結構 節點*根,  int  val)  
{  
     如果(根 == NULL)  
         返回 getNode(val);    
     if (root->key < val)  
         root->right = insertNode(root->right,val);    
     if (root->key > val)  
         root->left = insertNode(root->left,val);    
     返回 根;  
}    
//二叉搜索樹的中序遍歷  
無效 順序(結構 節點*根)  
{  
    如果(根 == NULL)  
        返回;    
    //遍歷左子樹  
    中序(根->左);    
    //訪問根  
    printf( "%d" ,root->key);    
    //遍歷右子樹  
    中序(根-> 右);  
}    
主函數 ()  
{  
   結構 節點 *root = NULL;      
    整數 數據;  
    字符 ch;  
        /* 執行 while 循環以顯示各種選項以供選擇以決定輸入 */  
        做      
        {  
            printf( "\n選擇其中一項操作::" );  
            printf( "\n1. 在二叉樹中插入一個新節點" );  
            printf( "\n2. 顯示二叉樹的節點(通過中序遍歷).\n" );    
            整數 選擇;  
            scanf( "%d" ,&choice);              
            開關 (選擇)  
            {  
            案例 1:   
                printf( "\n輸入要插入的值\n" );  
                scanf( "%d" ,&data);  
                根=插入節點(根,數據);                    
                休息;                            
            案例 2:   
                printf( "\n二叉樹的中序遍歷::\n" );  
                有序(根);  
                休息;   
            默認 :   
                printf( "輸入錯誤\n" );  
                休息;     
            }    
            printf( "\n你想繼續嗎(輸入y或n)\n" );  
            scanf( "%c" ,&ch);                          
        } 而 (ch ==  'Y' || ch ==  'y' );  
  
   返回 0;  
}  

輸出

上面的 C 代碼配置了以下輸出。

選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2. 顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
12
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
98
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
23
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
78
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
45
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
1
輸入要插入的值
87
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過中序遍歷)。
2
二叉樹的中序遍歷::
12 23 45 78 87 98
您要繼續嗎(鍵入 y 或 n)
n

前序樹遍歷

在這種遍歷方法中,首先訪問根節點,然后訪問左子樹,最后訪問右子樹。

讓我們為二叉搜索樹的前序遍歷編寫一個 C 代碼。

/* 
 * 程序:二叉搜索樹的前序遍歷 
 * 語言:C 
 */    
#include<stdio.h>  
#include<stdlib.h>    
結構 節點  
{  
    整數 鍵;  
    結構 節點*左;  
    結構 節點*對;  
};    
//返回具有給定值的新節點  
結構 節點 *getNode( int  val)  
{  
    結構 節點 *newNode;    
    newNode = malloc( sizeof ( struct  node));    
    newNode->key = val;  
    新節點->左= NULL;  
    新節點->右=空;    
    返回 新節點;  
}    
//在二叉搜索樹中插入節點  
結構 節點*插入節點(結構 節點*根,  int  val)  
{  
     如果(根 == NULL)  
         返回 getNode(val);    
     if (root->key < val)  
         root->right = insertNode(root->right,val);    
     if (root->key > val)  
         root->left = insertNode(root->left,val);    
     返回 根;  
}    
//二叉搜索樹的前序遍歷  
無效 預購(結構 節點*根)  
{  
    如果(根 == NULL)  
        返回;    
    //訪問根  
    printf( "%d" ,root->key);    
    //遍歷左子樹  
    預購(根->左);    
    //遍歷右子樹  
    預購(根->右);  
}    
主函數 ()  
{  
   結構 節點 *root = NULL;    
   整數 數據;  
    字符 ch;  
        /* 執行 while 循環以顯示各種選項以供選擇以決定輸入 */  
        做      
        {  
            printf( "\n選擇其中一項操作::" );  
            printf( "\n1. 在二叉樹中插入一個新節點" );  
            printf( "\n2. 顯示二叉樹的節點(通過前序遍歷).\n" );    
            整數 選擇;  
            scanf( "%d" ,&choice);              
            開關 (選擇)  
            {  
            案例 1:   
                printf( "\n輸入要插入的值\n" );  
                scanf( "%d" ,&data);  
                根=插入節點(根,數據);                    
                休息;                            
            案例 2:   
                printf( "\n二叉樹的前序遍歷::\n" );  
                預購(根);  
                休息;   
            默認 :   
                printf( "輸入錯誤\n" );  
                休息;     
            }    
            printf( "\n你想繼續嗎(輸入y或n)\n" );  
            scanf( "%c" ,&ch);                          
        } 而 (ch ==  'Y' || ch ==  'y' );      
   返回 0;  
}  

輸出:

選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
45
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
53
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
1
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
2
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
97
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
22
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
2
二叉樹的前序遍歷::
45 1 2 22 53 97
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
76
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
30
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
67
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
1
輸入要插入的值
4
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過前序遍歷)。
2
二叉樹的前序遍歷::
45 1 2 22 4 30 53 97 76 67
您要繼續嗎(鍵入 y 或 n)
n

后序樹遍歷

在這種遍歷方法中,根節點最后被訪問,因此得名。首先,我們遍歷左子樹,然后是右子樹,最后是根節點。

讓我們編寫一個用于二叉搜索樹的后序遍歷的程序。

/* 
 * 程序:二叉搜索樹的后序遍歷 
 * 語言:C 
 */    
#include<stdio.h>  
#include<stdlib.h>    
結構 節點  
{  
    整數 鍵;  
    結構 節點*左;  
    結構 節點*對;  
};    
//返回具有給定值的新節點  
結構 節點 *getNode( int  val)  
{  
    結構 節點 *newNode;    
    newNode = malloc( sizeof ( struct  node));    
    newNode->key = val;  
    新節點->左= NULL;  
    新節點->右=空;    
    返回 新節點;  
}  
//在二叉搜索樹中插入節點  
結構 節點*插入節點(結構 節點*根,  int  val)  
{  
     如果(根 == NULL)  
         返回 getNode(val);    
     if (root->key < val)  
         root->right = insertNode(root->right,val);    
     if (root->key > val)  
         root->left = insertNode(root->left,val);    
     返回 根;  
}   
//二叉搜索樹的后序遍歷  
無效 后序(結構 節點*根)  
{  
    如果(根 == NULL)  
        返回;    
    //遍歷左子樹  
    后序(根->左);    
    //遍歷右子樹  
    后序(根->右);    
    //訪問根  
    printf( "%d" ,root->key);  
}  
主函數 ()  
{  
   結構 節點 *root = NULL;         
   整數 數據;  
    字符 ch;  
        /* 執行 while 循環以顯示各種選項以供選擇以決定輸入 */  
        做      
        {  
            printf( "\n選擇其中一項操作::" );  
            printf( "\n1. 在二叉樹中插入一個新節點" );  
            printf( "\n2. 顯示二叉樹的節點(通過后序遍歷).\n" );   
            整數 選擇;  
            scanf( "%d" ,&choice);              
            開關 (選擇)  
            {  
            案例 1:   
                printf( "\n輸入要插入的值\n" );  
                scanf( "%d" ,&data);  
                根=插入節點(根,數據);                    
                休息;                            
            案例 2:   
                printf( "\n二叉樹的后序遍歷::\n" );  
                后序(根);  
                休息;   
            默認 :   
                printf( "輸入錯誤\n" );  
                休息;     
            }    
            printf( "\n你想繼續嗎(輸入y或n)\n" );  
            scanf( "%c" ,&ch);                          
        } 而 (ch ==  'Y' || ch ==  'y' );    
   返回 0;  
}  

輸出:

選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
12
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
31
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
24
輸入錯誤
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
24
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
88
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
67
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
56
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
90
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
44
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
71
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
38
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
1
輸入要插入的值
29
您要繼續嗎(鍵入 y 或 n)
是的
選擇其中一項操作::
1. 在二叉樹中插入一個新節點
2.顯示二叉樹的節點(通過后序遍歷)。
2
二叉樹的后序遍歷::
29 24 38 44 56 71 67 90 88 31 12
您要繼續嗎(鍵入 y 或 n)
n

我們已經看到了不同的 C 程序來實現常用數據結構中二叉樹節點的中序、前序和后序遍歷。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 久久伊人色 | 国产乱人乱精一区二区视频密 | 亚洲人一区| 欧美一级专区免费大片野外交 | 人人艹人人 | 欧美日韩一区视频 | 日本黄色小视频在线观看 | 香港日本三级在线播放 | 日本免费一级视频 | yy4080午夜一毛片 | 欧美激情视频一区二区 | 国产精品视频在这里有精品 | 久久精品免费全国观看国产 | 亚洲成年网 | 中文字幕丝袜在线56页 | 一级特黄特黄的大片免费 | 欧美精品国产第一区二区 | 日韩欧美一区在线观看 | 亚洲成人黄色片 | 成年人深夜福利 | ak福利午夜在线观看 | 欧美日韩三级在线 | 日韩成人一级 | 欧美高清另类video | 国产91色在线 | 亚洲 | 国产欧美精品一区二区三区 | 久久免费视频网 | 亚洲麻豆| 国产一级一片免费播放刺激 | 曰皮视频在线播放免费的 | 黄色肉肉视频 | 久久成人a毛片免费观看网站 | 精品久久久久久亚洲精品 | 三级在线观看 | 亚洲国产精品毛片∧v卡在线 | 国产一区二区三区国产精品 | 丁香激情综合色伊人久久 | 亚洲国产精品视频 | 欧美日韩免费一区二区三区 | 国产亚洲一区二区三区在线 | 在线不卡日韩 |