Java實現二叉樹的遍歷(遞迴和非遞迴)

2021-06-26 01:52:58 字數 1463 閱讀 2451

一直以來,自己在資料結構這一塊下的功夫不怎麼多,一些常用的演算法也就是知道個大概的原理,要實現的話光靠自己想是想不出來的,還得去上網查。通過這個機會,就想著好好的鞏固一下的資料結構這塊,畢竟這是基礎中的基礎嘛。下面是以二叉樹為例,採用遞迴、非遞迴實現前序、中序、後序遍歷操作。

/** 二叉樹節點 */

public class btnode

public btnode(char key, btnode left, btnode right)

public char getkey()

public void setkey(char key)

public btnode getleft()

public void setleft(btnode left)

public btnode getright()

public void setright(btnode right)

}/** 二叉樹遍歷 */

public class bintree

public btnode getroot()

/** 構造樹 */

public static btnode init()

/** 訪問節點 */

public static void visit(btnode p)

/** 遞迴實現前序遍歷 */

protected static void preorder(btnode p)

}  /** 遞迴實現中序遍歷 */

protected static void inorder(btnode p)

}  /** 遞迴實現後序遍歷 */

protected static void postorder(btnode p)

}  /** 非遞迴實現前序遍歷 */

protected static void iterativepreorder(btnode p)

}}  /** 非遞迴實現後序遍歷 */

protected static void iterativepostorder(btnode p)

// 處理右子

stack.push(p);

p = p.getright();

}}  /** 非遞迴實現中序遍歷 */

protected static void iterativeinorder(btnode p)

p = stack.pop();

while (!stack.empty() && p.getright() == null)

visit(p);

if (!stack.empty())

p = stack.pop();

else

p = null;

}}  public static void main(string args)

}

二叉樹遞迴 非遞迴遍歷(Java實現)

遍歷是對一顆二叉樹最基本的操作,有前序遍歷 中序遍歷 後序遍歷和層次遍歷四種,都可以通過遞迴或者資料結構實現。假定葉子結構如下 static classleaf publicstring tostring 1.前序遍歷 先訪問其根節點,再訪問其左節點,最後訪問其右節點。遞迴實現 先訪問其根節點,然後...

二叉樹遍歷遞迴實現

include include define flag int define l 0 define r 1 typedef struct tree tree tree init tree int data void destroy tree tree root void insert tree t,...

遍歷二叉樹 遞迴實現

二叉樹作為樹的一種,是一種重要的資料結構,也是面試官經常考的東西。二叉樹中的面試題比較常見的題型大概有下面幾個 建立一顆二叉樹 先序,中序,後序 遍歷一顆二叉樹 先序,中序,後序和層次遍歷 求二叉樹中葉子節點的個數 求二叉樹的高度等等。binarytree.h pragma once templat...