1. 程式人生 > >C++ 二叉樹建立,遍歷

C++ 二叉樹建立,遍歷

#include<iostream>
using namespace std;
struct bitNode
{
	char data;
	bitNode *lchild, *rchild;
} ;

void createBiTree ( bitNode  *&T )
{
	char ch;
	cin >> ch;
	if ( ch == '#' )
		T = nullptr;
	else
	{
		T = new bitNode;
		T->data = ch;
		createBiTree(T->lchild);
		createBiTree(T->rchild);

	}
}

void operation1(char ch)
{
	cout<<ch<<" ";
}

void preOrder(bitNode *T)
{
	if(T==nullptr)
		return;
	operation1(T->data);
	preOrder(T->lchild);
	preOrder(T->rchild);
}

void inOrder(bitNode *T)
{
	if(T==nullptr)
		return;

	inOrder(T->lchild);
	operation1(T->data);
	inOrder(T->rchild);
}

void postOrder(bitNode *T)
{
	if(T==nullptr)
		return;

	postOrder(T->lchild);
	postOrder(T->rchild);
	operation1(T->data);
}


int main()
{
	bitNode *T=nullptr;
	createBiTree(T);
	cout<<"前序 "<<endl;
	preOrder(T);
	cout<<endl;
	cout<<"中序 "<<endl;
	inOrder(T);
	cout<<endl;
	cout<<"後序 "<<endl;
	postOrder(T);
	return 0;
}

相關推薦

C++ 建立

#include<iostream> using namespace std; struct bitNode { char data; bitNode *lchild, *rchild

建立(類)

程式碼: #include<iostream> #include<queue> using namespace std; //建立節點 struct Tnode { char data;//資料域 Tnode *rchild;//右孩子 Tno

C++建立

注意:二叉樹建立時要用指標的引用,詳解參考:#include <iostream> using namespace std; struct BiNode { char data; BiNode *lchild, *rchild; }; void Creat

建立、求深度--C語言實現

#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int ElemType; //資料型別 typedef int Status; //返回值型別

建立(前序中序後序)求葉節點個數求節點個數

二叉樹是筆試面試中考試最頻繁的資料結構之一,主要包括,程式建立一個二叉樹,三種次序遍歷二叉樹,返回葉子節點的數目,求二叉樹節點的總數等。建立一個二叉樹節點的資料結構 typedef struct Node {int data;struct Node *left,*right

建立

mil inorder 推斷 microsoft con 是否 font pac node 二叉樹創建遍歷規則: 1.先序:根-左-右 2.中序:左-根-右 3.後序:左-右-根 二叉樹定義和輔助函數例如以下: struct node {

遞迴建立及深度計算

上篇咱們說到二叉樹的一種建立方法及三種遍歷方法的遞迴非遞迴演算法。這篇換了一種新的建立方法,用先根遍歷遞迴的思路建立二叉樹,用遞迴的方法計算深度,用中根遞迴和非遞迴方法遍歷整個二叉樹。 BinaryTree.h //二叉樹的建立和遍歷 #ifndef BINARYTREE_

建立以及(遞迴和非遞迴方式)

#include <iostream> #include <assert.h> #include <stack> using namespace std; typedef struct biTreeNode { c

資料結構實驗-C語言-二叉樹建立,前、中、後序遍歷的遞迴演算法和非遞迴演算法求葉子結點數目二叉樹深度判斷二叉樹是否相似二叉樹左右子互換,二叉樹層序遍歷的演算法判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

LeetCode102 ·的層次(C++)

leetcode 層次遍歷 nbsp tro 層次 遍歷 str 描述 c++ 題目描述: 給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。 例如:給定二叉樹: [3,9,20,null,null,15,7], 3 /

中序(非遞迴)演算法實現--C語言

今天繼續二叉樹的學習。 昨天寫了一遍二叉樹的先序遍歷(非遞迴)演算法,今天寫一下二叉樹的二叉樹的中序遍歷(非遞迴)演算法。中序遍歷的非遞迴演算法有兩種,但是個人覺得只要掌握一種就可以了,只要自己的邏輯清晰,會哪一種又有什麼關係呢~ 首先給出今天的二叉樹的示例圖: 程式碼如下:

Leetcode 102. 的層次 C++

題目描述: 給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。 例如: 給定二叉樹: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其層次遍歷結果:

後序(遞迴與非遞迴)演算法及C語言實現

二叉樹後序遍歷的實現思想是:從根節點出發,依次遍歷各節點的左右子樹,直到當前節點左右子樹遍歷完成後,才訪問該節點元素。 圖 1 二叉樹   如圖 1 中,對此二叉樹進行後序遍歷的操作過程為: 從根節點 1 開始,遍歷該節點的左子樹(以節點 2 為根節點); 遍歷節點 2 的左子樹(以節點 4 為根

中序(遞迴和非遞迴)演算法及C語言實現

二叉樹中序遍歷的實現思想是: 訪問當前節點的左子樹; 訪問根節點; 訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用中序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 遍歷節點 1 的左子樹,找到節點 2; 遍歷節點 2 的左子樹,找到節點 4;

先序(遞迴與非遞迴)及C語言實現

二叉樹先序遍歷的實現思想是: 訪問根節點; 訪問當前節點的左子樹; 若當前節點無左子樹,則訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用先序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 訪問節點 1 的左子樹,找到節點 2; 訪問節點 2 的左子

C語言實現的各種及求解深度

#include<stdio.h> #include<malloc.h> #define MAXSIZE 100 typedef char dataType; //二叉樹結構 typedef struct bnode{ dataType data; struct bnode *lC

的各種演算法C++實現

大概在網上摘抄和總結了二叉樹的幾種遍歷方法,有遞迴和非遞迴的,先貼在這裡,用的時候在來看看。再次謝謝網上的各種資源。謝謝CSDN博主SJF0115,謝謝劍指offer作者何海濤~ #include"stdafx.h" #include<iostream>

後序(非遞迴)演算法實現--C語言

  一直說要寫二叉樹的後序非遞迴遍歷演算法,但是前兩天各種事情,今天終於有時間好好寫一寫二叉樹的後序遍歷演算法。   二叉樹的後序遍歷演算法比先序和中序的遍歷演算法要複雜一些。其出棧條件有兩種情況: 棧頂元素所指向的節點的左子樹和右子樹均為空; 棧頂元素所指向的節點的左子樹

leetcode 145+590 後序(iterative)(附58914494)

題目描述 145. Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' values. Example: Input: [1,nu

LeetCode 107. 的層次 II(C++)

題目 給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷) 例如: 給定二叉樹 [3,9,20,null,null,15,7],