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
C:C語言前序建立二叉樹的兩種方式和前序遍歷二叉樹的方法
#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 個數,所以只需要將這棵樹進行中序遍歷即可,下面程式碼是非遞迴形式的二叉樹中序遍歷。 程式碼如下: /**