1. 程式人生 > >C語言遍歷二叉樹的遞迴呼叫操作集

C語言遍歷二叉樹的遞迴呼叫操作集


#include <string.h>  
#include <stdio.h>  
#include <malloc.h>    
typedef int ElemType;
  
typedef struct BiTNode  
{  
    ElemType data;  
    struct BiTNode* lchild;  
    struct BiTNode* rchild;  
}BiTNode, *BiTree;  






void createBiTree(BiTree &T)  
{  
    char data;  
    data = getchar();  
    if(data == '#')  
    {  
        T = NULL;  
    }  
    else
{
T=(BiTree)malloc(sizeof(BiTNode));
T->data=data;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}




void preOrderTraverse(BiTree &T)  //先序遍歷遞迴
{  
    if(T)  
    {  
        printf("%c",T->data);
        preOrderTraverse(T->lchild);
        preOrderTraverse(T->rchild);
    }  
}  


void inOrderTraverse(BiTree &T)   //中序遍歷遞迴
{
if(T)
{
inOrderTraverse(T->lchild);
printf("%c",T->data);
inOrderTraverse(T->rchild);
}
}
void postOrderTraverse(BiTree &T)   //後序遍歷遞迴
{
if(T)
{
postOrderTraverse(T->lchild);
postOrderTraverse(T->rchild);
printf("%c",T->data);
}
}




void destroyTraverse(BiTree &T)   //銷燬二叉樹遞迴
{
if(T)
{
   destroyTraverse(T->lchild);
destroyTraverse(T->rchild);
free(T);
T=NULL;
}
}
  




int lengthTraverse(BiTree &T)        //樹的深度遞迴
{
int ldepth;
int rdepth;
if(T==NULL)
{
return 0;
}


ldepth=lengthTraverse(T->lchild);
rdepth=lengthTraverse(T->rchild);


return (ldepth>rdepth)? (ldepth+1):(rdepth+1);
}




int leafnumberTraverse(BiTree &T)    //求樹的葉子節點遞迴
{
if(T==NULL)
{
return 0;
}
if(T->lchild==NULL&&T->rchild==NULL)
   
return 1;
return leafnumberTraverse(T->lchild)+leafnumberTraverse(T->rchild);
}






void exchangechild(BiTree &T)       //交換樹的左右孩子遞迴
{
BiTree temp;
if(T)
{
temp=NULL;
if(T->lchild||T->rchild)
temp=T->lchild;
   T->lchild=T->rchild;
T->rchild=temp;
exchangechild(T->lchild);
exchangechild(T->rchild);




}
}
        


  


int main()  
{  
    BiTree T = NULL; 
    printf("請輸入需要建立二叉樹的序列:\n"); //大兄弟,如果不能顯示那麼就是你輸入的問題:嘗試輸入  ABE###CD###     意思就是A( B(E),C(D) )
    createBiTree(T);  
printf("先序遞迴遍歷: "); 
preOrderTraverse(T); 
printf("\n中序遞迴遍歷:");
inOrderTraverse(T);
printf("\n後序遞迴遍歷:");
   postOrderTraverse(T);


        printf("\n樹的高度為:%3d\n",lengthTraverse(T));




printf("\n樹的 葉子節點個數為:%3d\n",leafnumberTraverse(T));




exchangechild(T);
printf("\n對交換後的數進行先序遞迴遍歷:\n "); 
preOrderTraverse(T); 

return 0;
}  

相關推薦

C語言呼叫操作

#include <string.h>   #include <stdio.h>   #include <malloc.h>     typedef int ElemType;    typedef struct BiTNode  

Leetcode---中序--和非

中序遍歷二叉樹 題目連結:中序遍歷二叉樹 解法一: 遞迴遍歷比較簡單 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> result = new ArrayLi

前,中,後序 ( && 非的棧 && 非非棧的線索)

先簡單介紹下線索二叉樹,線索二叉樹不需要額外的空間便可以O(n)遍歷二叉樹,它充分利用了節點的空指標,若當前結點的左孩子不為空則其左指標指向左孩子結點,否則指向當前節點的前驅;若當前結點的右孩子不為空則其右指標指向右孩子結點,否則指向當前節點的後繼。具體看程式碼實現 前序遍

-和非演算法

// 二叉樹節點 typedef struct Bitree { char data; struct Bitree *lchild, *rchild; }Bitree; // 新節點 Bitree *new(char data) { Bitree *a = (Bitree *)malloc(sizeo

算法 - - 歸和非

main tor out ash nbsp null args class ring import java.util.Stack; import java.util.HashMap; public class BinTree { private

--C語言

  之前寫了關於二叉樹的非遞迴遍歷演算法的程式碼,今天把二叉樹的遞迴遍歷演算法的程式碼補上,內容很簡單!但是今天也算是寫了一會兒程式碼了~姑且這麼認為吧~ 程式碼: #include <stdio.h> #include <stdlib.h> typedef

C語言構造並

#include<stdio.h> #include<malloc.h> #define FALSE 1 #define ERROR 0 #define OK 1 #define ON 0 typedef struct BiTNode {

C語言版)演算法——包含前、中、後序和層次,非前、中、後序和層次共八種

#include <stdlib.h> #include <stdio.h> #include "BiTree.h" #include "LinkStack.h" #include "LinkQueue.h" //初始化二叉樹(含根節點) void InitBiTree(pBiTr

中序(非演算法 c語言

#include "stdio.h" #include "string.h" #include "malloc.h" #define NULL 0 #define MAXSIZE 30 typedef struct BiTNode      //定義二叉樹資料結構 {  

資料結構 BFS層次C語言版本】

//案例輸入(其中的“#”表示空,並且輸入過程中不要加回車) 輸入序列ABC##DE#G##F### 輸入序列ABD##E##CF#G### 輸入序列ABD###C## #include <stdio.h> //測試OK,可以執行 #include <s

CC語言前序建立的兩種方式和前序的方法

#include<stdio.h> #include<stdlib.h> typedef struct BiTreeNode { int data; struct BiTre

C語言:線索的線索化及其實現

       前序和中序遍歷都實現了,後序線索化還不是很明白!如有大神看到,望指正!不勝感激! // 中序線索二叉樹實現.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include<iostream> #includ

C++建立、非的基本操作

       最近學了二叉樹,這個資料結構和它的名字一樣,真是二叉。如果單純的讓我想這樣的演算法,以筆者的腦子想一輩子都想不出來。二叉樹剛學完,老師又講了圖。        俗話說,不能在一棵樹上吊死,那我選擇在二叉樹上吊死。關鍵是圖還在下面扯著你,二叉樹這個資料結構不會

歸方式

方式 pri stat print binary ise pre void reorder /** * 非遞歸方式的先根序 * @param root */ public static void preOrder(Node roo

先序

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

三種

tree binary root sea inorder 遍歷二叉樹 二叉樹 struct != 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType

線索化二(附三種非方式

資料結構二叉樹這快學的雲裡霧裡,所以就寫歌c++樹的類來將這寫東西全部封裝起來,想用那個直接呼叫方法,我決免費將這個大類提供給大家,提供學習上的參考,少走彎路,由於程式碼比較多,我就將各方法的功能做了註釋,如果那有什麼不懂的,可以交流。線面就是原始碼了~~~ tree.h #ifnd

JAVA 先序、中序、後序、層序,

定義一個二叉樹 package com.niuke.binaryTree; public class binaryTree { int data; binaryTree left; binaryTree right; public binaryTree(int

與非的(前,中,後)

#include<stdio.h> #include<stdlib.h> typedef struct node { char data; struct node *lchild,*rchild; }bintnode; typedef struct

【LeetCode】 230. Kth Smallest Element in a BST(非中序

因為這是一棵二叉搜尋樹,所以找它的第 kkk 小值,就是這棵二叉搜尋樹的中序遍歷之後的第 kkk 個數,所以只需要將這棵樹進行中序遍歷即可,下面程式碼是非遞迴形式的二叉樹中序遍歷。 程式碼如下: /**