1. 程式人生 > >遞迴實現後序遍歷二叉樹

遞迴實現後序遍歷二叉樹

問題描述

        從鍵盤接受輸入先序序列,以二叉連結串列作為儲存結構,建立二叉樹(以先序來建立)並對其進行後序遍歷,然後將遍歷結果列印輸出。要求採用遞迴方法實現。

解題思路   

        遞迴實現

程式實現

#include <stdio.h>
#include <stdlib.h>
typedef char Datatype;
/*二叉樹*/
typedef struct Node {
	Datatype data;
	struct Node *LChild;
	struct Node *RChild;
} BiTNode, *BiTree;

void createBiTree(BiTree *tree);
void traverseTree(BiTree tree); 
int main(int argc, char *argv[]) {
	BiTree tree;
	printf("按先序遍歷序列建立二叉樹:\n");
	createBiTree(&tree);
	traverseTree(tree);
	return 0;
}

void createBiTree(BiTree *tree) {
	char ch;
	ch = getchar();
	if(ch == ' ') {
		*tree = NULL;
	} else {
		//生成一個新結點
		*tree = (BiTree)malloc(sizeof(BiTNode));
		(*tree)->data = ch;
		//生成左子樹
		createBiTree(&((*tree)->LChild));
		//生成右子樹
		createBiTree(&((*tree)->RChild));
	}
}
/**遍歷樹的結點*/
void traverseTree(BiTree tree) {
	int i;
	if(tree == NULL) {
		return;
	}
	traverseTree(tree->LChild);
	traverseTree(tree->RChild);
	printf("%c", tree->data);
}

執行結果

相關推薦

資料結構-非實現

最近在看關於樹結構方面的東西,想著實現二叉樹的遍歷操作。層序,先序,中序都還好,後序就比較麻煩,下面的地址很好的解釋了遞迴與非遞迴的實現方法,在此給出另一種非遞迴實現後序遍歷二叉樹的方法,通過複雜化資料結構,使得演算法更簡單。 http://blog.csdn.net/pi

實現

問題描述         從鍵盤接受輸入先序序

實現

問題描述         從鍵盤接受輸入先序序

資料結構-----演算法(利用堆疊實現)

一、非遞迴後序遍歷演算法思想 後序遍歷的非遞迴演算法中節點的進棧次數是兩個,即每個節點都要進棧兩次,第二次退棧的時候才訪問節點。 第一次進棧時,在遍歷左子樹的過程中將"根"節點進棧,待左子樹訪問完後,回溯的節點退棧,即退出這個"根"節點,但不能立即訪問,只能藉助於這個"根"

二叉樹的遍歷問題是二叉樹的基本問題,也是在資料結構中比較常見的問題,二叉樹的遍歷分為前序遍歷、中序遍歷和後序遍歷,其中這些某序指的是每棵子樹根節點的位置,對於左右分支來說,順序永遠都是先左後右。我相信學過資料結構的姑娘和小夥子一定對這個都有所瞭解,並且也都能寫出對已知二叉

的學習——(構建、根據前序列、中序列構建

前言 最近兩個星期一直都在斷斷續續的學習二叉樹的資料結構,昨晚突然有點融匯貫通的感覺,這裡記錄一下吧 題目要求 給定前序序列,abc##de#g##f###,構建二叉樹,並且用遞迴和非遞迴兩種方法去做前序,中序和後序遍歷 二叉樹的資料結構 #define STACKSI

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

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

002 前、中、&非演算法)

class TreeNode: self.val = x self.left = None self.right = None 遞迴演算法: 前序遍歷二叉樹 class Solution: def preOrderTrave

[C/C++] 先建立| 先、中| 求深度、節點數、葉節點數 演算法實現

/* * BinTree.h */ #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #defi

【TOJ 1224】數據結構練習題――

給定 esc 中序遍歷 二叉 以及 max 構造 參數 練習 Description 給定一顆二叉樹,要求輸出二叉樹的深度以及後序遍歷二叉樹得到的序列。本題假設二叉樹的結點數不超過1000。 Input 輸入數據分為多組,第一行是測試數據的組數n,下面的n行分別代表一棵二叉

(關鍵詞:////搜尋/根搜尋)

後序遍歷二叉樹 遞迴演算法 def postorderTraversal(root): f = postorderTraversal return f(root.left) + f(root.right) + [root.val] if root is not None el

package leetcode; /*Given a binary tree, return the postorder traversal of its nodes' values. */ import java.util.ArrayList; public class Binary_tre

LeetCode 145 Binary Tree Postorder Traversal ()

Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary

的先(和非)、中(和非)、(非)及層次java實現

二叉樹的先序遍歷,遞迴實現: public List<Integer> preorderTraversal(TreeNode root) { //用棧來實現 List<Integer> list = new ArrayList&l

的非實現

//先序遍歷非遞迴演算法的實現 用到自定義的棧 void preOrderNonrecursion(BTNode *bt) { if(bt !=null) { BTNode *stack[maxSize]; //先定義一個棧用於存放遍歷的二叉樹 int

Leetcode---中--和非

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

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

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

演算法詳解

注意學習這個演算法需要隨時可以在腦海中輸出二叉樹的中序遍歷的序列 舉例: 如上圖,我們就看到一棵二叉樹:那麼我們是不是馬上可以想到這棵二叉樹的中序遍歷序列是什麼呢? 我直接給出答案:D B EF A G H C I 我們如果不適用遞迴中序遍歷二叉樹

(非演算法 c語言)

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

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