1. 程式人生 > >二叉樹的各種遍歷方式

二叉樹的各種遍歷方式

class TreeNode{
	TreeNode root;
	TreeNode left;
	TreeNode right;
	int val;
}
public class TreeNodeGo{
	//深度優先搜尋(先序、中序、後序)
	public void DFS(TreeNode root){
		if(root==null) return;
		if(root.left!=null) DFS(root.left);
		if(root.right!=null) DFS(root.right);
		System.out.println(root.val);
	}
	//廣度優先搜尋(按層遍歷)
public void BFS(TreeNode root){ Queue<TreeNode> queue=new LinkedList<>(); if(root!=null){ queue.add(root); whlie(!queue.isEmpty()){ TreeNode node=queue.poll();//移除並返回佇列首的元素 System.out.println(node.val): if(node.left!=null)queue.add(node.left); if(node.right!=null)
queue.add(node.right); } } } //先序遍歷(遞迴) public void PrePrintTreeNode(TreeNode root){ if(root!=null){ System.out.Println(root.val); PrePrintTreeNode(root.left); PrePrintTreeNode(root.right); } } //先序遍歷(非遞迴) public void PrePrintTreeNode2(TreeNode root){ TreeNode p=root; Stack <
TreeNode>
stack=new Stack<TreeNode>(); while(p!=null||!stack.isEmpty()){ if(p!=null){ stack.push(p); System.out.println(p.val); p=p.left; } else { p=stack.pop(); p=p.right; } } } //中序遍歷(遞迴) public void MidPrintTreeNode(TreeNode root){ if(root!=null){ MidPrintTreeNode(root.left); System.out.println(root.val); MidPrintTreeNode(root.right); } } //中序遍歷(非遞迴) public void MidPrintTreeNode2(TreeNode root){ TreeNode p=root; Stack <TreeNode> stack=new Stack<TreeNode>(); while(p!=null||!stack.isEmpty()){ if(p!=null){ stack.push(p); p=p.left; } else { p=stack.pop(); System.out.println(p.val); p=p.right; } } } //後序遍歷(遞迴) public void BehPrintTreeNode(TreeNode root){ if(root!=null){ BehPrintTreeNode(root.left); BehPrintTreeNode(root.right); System.out.println(root.val); } } //後序遍歷(非遞迴) public void BehPrintTreeNode(TreeNode root){ if(root!=null){ Stack <TreeNode> stack=new Stack<TreeNode>(); for(TreeNode node=root;!stack.Empty();node!=null;){ while(root!=null){ stack.push(root); root=root.left; } while(!stack.empty()&& root==stack.peek().right){ root=stack.pop(); System.out.println(root.val); } if(stack.empty())return; else root=stack.peek().right(); } } } }

相關推薦

方式(遞歸、非遞歸)

前序遍歷 遍歷 層序 blog col node pre nbsp 二叉樹的遍歷 二叉樹的前序、中序、後序遍歷方式,遞歸與非遞歸。(層序遍歷的方式已經在之前的博客中寫過) 遞歸方式比較簡單。 前序遍歷: void preorder(TreeNode* root){

方式(遞迴、非遞迴)——Java實現

二叉樹作為一種常用的資料結構,也是面試經常被問到的知識點,瞭解二叉樹的結構和性質也是很有必要的,對於眾多的樹結構,二叉樹只是入門的一種,先把二叉樹理解通透,再深入學習時,會更簡單一些。 二叉樹的性質: (1) 在非空二叉樹中,第i層的結點總數不超過 , i>=1;

面試題之方式

一、基本概念 1、二叉樹的概念 一棵二叉樹是結點的一個有限集合,該集合或者為空,或者是由一個根節點加上兩棵分別稱為左子樹和右子樹的二叉樹組成(即一個根節點最多隻有兩個孩子結點)。 2、二叉樹的特點 (1)每個結點最多有兩棵子樹,即二叉樹不存在度大於2的結

方式

一.遞迴進行遍歷  //前序遍歷     public void preOrder(TreeNode root,List<Integer> list){         if(root==null){  

各種操作

目錄 本文總結關於二叉樹的各種遍歷演算法 首先定義二叉樹節點結構體 struct TreeNode { int val; struct TreeNode *lef

演算法之各種

樹形結構是一類重要的非線性資料結構,其中以樹和二叉樹最為常用。 二叉樹是每個結點最多有兩個子樹的有序樹。通常子樹的根被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作二叉查詢樹和二叉堆或是二叉排序樹。二叉樹的每個結點至多隻

關於:遞迴方式和非遞迴方式

首先來定義樹的節點: package test2018925.findTree; public class Node { public int value; public Node left; public Node right; public Node(int data){ this.va

方式實現

遞迴方式就是函式自身呼叫自身,當遞迴每次呼叫自身時,可以看作是入棧的過程,當遞迴條件滿足後,結束時遞迴再一級一級的返回,返回過程可以看作是出棧的過程。遞迴和棧的實現過程可以看出都是符合“先進後出,後入先出”的原則,所以遞迴方式其實可以轉化為棧的方式來實現。對於二叉樹的遍歷,先

實現

size 非遞歸算法 沒有 con nod order reorder 實現 traverse 二叉樹的先序遍歷//先序遍歷二叉樹的遞歸實現 void PreOrderTraverse(BiTree T) { if(T) { printf("%2c",T->

層次

!= problem splay color list gif 二叉樹層次遍歷 eno empty http://www.lintcode.com/zh-cn/problem/binary-tree-level-order-traversal/# 錯誤點:queue是抽象的

畢業了-java層次算法

== 需要 數據 nbsp 測試 class system col ava /*************************************** * 時間:2017年6月23日 * author:lcy * 內容:二叉樹的

畢業了C++層次

== 容器 null tdi 指針 creat tno bit stack //代碼經過測試,賦值粘貼即可用#include<iostream> #include<stdio.h> #include<stack> #include<

的模板 先序建立 深度

先序遍歷 個數 iostream 葉子節點個數 pop level else 二叉樹的層次遍歷 num 關於二叉樹,基本操作都是在遞歸的基礎上完成的,二叉樹的層次遍歷是隊列實現。具體解釋看代碼 #include<iostream> #include<st

第六章例題層次

ear 指針 內存 寬度優先 def delete back blog value 1.指針實現 #include <iostream> #include <vector> #include <queue> #include <

Python實現

二叉樹的遍歷 終端 ini right name 一個 pan 樹的遍歷 二叉樹 二叉樹是有限個元素的集合,該集合或者為空、或者有一個稱為根節點(root)的元素及兩個互不相交的、分別被稱為左子樹和右子樹的二叉樹組成。 二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結

C#實現

c# 遍歷 二叉樹 遞歸 循環 C#實現二叉樹的前序、中序、後序遍歷。public class BinaryTreeNode { int value; BinaryTreeNode left; BinaryTreeNode r

數據結構 樹 樹的三種遍歷 對於二叉樹的遍歷基本上分為三種。前序遍歷,中序遍歷,後序遍歷。 先講第一種,前序遍歷。前序遍歷就是說,第一步,先訪問根結點,然後再訪問左子樹,最後是訪問右子樹。就拿圖中的樹來講吧。先序遍歷,先訪問根節點。於是,第一步先訪問結點A。接著訪問左子樹,通過觀察發現,

碼海拾遺:(遞歸實現)

code out pos 高度 tor 個數 htc alt include   二叉樹是一種特殊的樹結構:每個節點最多有兩個子節點。   二叉樹的性質:   (1)二叉樹第i層的節點數目最多為 2{i-1} (i≥1)。   (2)深度為k的二叉樹至多有2{k}-1個結點

python3實現與遞歸算法解析

python brush 進行 實現 兩張 二進制 pan ret 如果 1、二叉樹的三種遍歷方式   二叉樹有三種遍歷方式:先序遍歷,中序遍歷,後續遍歷 即:先中後指的是訪問根節點的順序 eg:先序 根左右 中序 左根右 後序 左右根   遍歷總體思路:將樹

垂直 · Binary Tree Vertical Order Traversal

復雜 程序 str bin 思維 number 給定 class 復雜度 [抄題]: 給定二叉樹,返回其節點值的垂直遍歷順序。 (即逐列從上到下)。如果兩個節點在同一行和同一列中,則順序應 從左到右。 給定一個二叉樹 {3,9,20,#,#,15,7} 3 / /