樹的前中後序遍歷(遞迴與非遞迴版)

2021-08-21 09:21:58 字數 1339 閱讀 1148

對於二叉樹而言,我們首先應當知曉的知識就是二叉樹的遍歷。

首先,二叉樹遍歷有前中後三種遍歷方法,在遞迴版中,前序遍歷就是第一次遇到該節點就列印,中序遍歷就是第二次遇到列印該節點,後續遍歷就是第三次遇到該節點列印。

遞迴實質是系統幫助我們壓棧,儲存現場資訊,而非遞迴就需要我們自己來壓棧。

二叉樹結構:

public static class node

}

遞迴版前序遍歷:
public static void preorderrecur(node head)

system.out.print(head.value + " ");

preorderrecur(head.left);

preorderrecur(head.right);

遞迴版中序遍歷:
public static void inorderrecur(node head)

inorderrecur(head.left);

system.out.print(head.value + " ");

inorderrecur(head.right);

}

遞迴版後序遍歷:
public static void posorderrecur(node head)

posorderrecur(head.left);

posorderrecur(head.right);

system.out.print(head.value+ " ");

}

非遞迴版前序遍歷:
public static void preorderunrecur(node head)

stackstack = new stack();

stack.add(head);

while (!stack.isempty())

if (head.left != null)

}system.out.println();

}

非遞迴版中序遍歷:
public static void inorderunrecur(node head)

stackstack = new stack();

while (!stack.isempty() || head != null)else

}system.out.println();

}

非遞迴版後序遍歷:
public static void posorderunrecur(node head)

if(head != null)

if (head.right != null)

}while (!stack1.isempty())

}}

main函式

前 中 後序遍歷非遞迴演算法

前中後序的差異在於節點訪問的時序。前序遍歷的根節點訪問在遍歷左子樹的同時就可以完成,實際上前序遍歷並不僅僅是訪問根節點。同時,它還訪問了結點的左孩子結點,也就是孩子結點是相對於雙親結點來說的,訪問了該節點也就是訪問了其雙親結點的左孩子結點,剩下的工作就是完成右孩子結點的訪問。這時候也是將左節點和根節...

二叉樹的前 中 後序遍歷(遞迴與非遞迴)

常見的二叉樹的遍歷有三種方式 前序遍歷 根節點,左子樹,右子樹 中序遍歷 左子樹,根節點,右子樹 後序遍歷 左子樹,右子樹,根節點 每種方式都可以用遞迴和非遞迴來實現 一 遞迴遍歷 1.先序遍歷 先訪問根節點,再訪問左子樹,左子樹訪問完之後,訪問右子樹 void btreeprevorder btn...

二叉樹的前中後序遍歷(遞迴與非遞迴)

bst樹的節點型別 param class bstnode public t getdata public void setdata t data public bstnodegetleft public void setleft bstnodeleft public bstnodegetright...