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;
	}
	printf("%c", tree->data);
	traverseTree(tree->LChild);
	traverseTree(tree->RChild);
}

執行結果

相關推薦

實現

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

資料結構-非實現

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

實現

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

的非實現

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

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

144. Binary Tree Preorder Traversal

reorder oot rec eno right table self. 先序遍歷 self Given a binary tree, return the preorder traversal of its nodes‘ values. For example: Giv

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

先序遍歷二叉樹 遞迴演算法 def preorderTraversal(root): f = preorderTraversal return [root.val] + f(root.left) + f(root.right) if root else [] 非遞迴演算

YTU OJ2344:

2344: 先序遍歷二叉樹 給定一顆二叉樹,要求輸出二叉樹的深度以及先序遍歷二叉樹得到的序列。本題假設二叉樹的結點數不超過1000。 輸入 輸入資料分為多組,第一行是測試資料的組數n,

給出兩種序列(含中)建立一顆

#include <iostream> #include <cstdio> #include <queue> #include <stack> #include <cstring> using namespace

c語言實現

停止 數據 節點 一個 null front getchar() getc 輸入 1 #include<stdio.h> 2 #include<conio.h> 3 #include<malloc.h> 4 typedef ch

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

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

Leetcode---中--和非

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

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

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

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

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

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

演算法詳解

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

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

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

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

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

(非演算法 c語言)

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

002 前、中、後&非演算法)

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