資料結構 樹的遍歷

2021-08-22 08:43:21 字數 1624 閱讀 1054

以前序遍歷為例

(1)先遍歷樹根

(2)然後前序遍歷左子樹

(3)最後前序遍歷右子樹

對於這樣的乙個二叉樹

前序遍歷結果:abdegcf

遍歷流程:

首先遍歷樹根,輸出a

對a的左子樹進行前序遍歷,怎麼前序遍歷?對於b這個左子樹而言,首先遍歷根節點,輸出b

然後遍歷子樹b的左子樹,得到d這個子樹,對d進行前序遍歷,首先遍歷樹根節點,輸出d

然後遍歷d的左子樹,不存在。那就遍歷d的右子樹,不存在。此時b的左子樹d遍歷完成

遍歷b的右子樹e,則前序遍歷e,首先遍歷樹根結點,輸出e

遍歷e的左子樹,得到子樹g,對於子樹g,前序遍歷g,得到樹根節點g,輸出g,此時g遍歷完成

此時a的左子樹遍歷完成,現在開始遍歷a的右子樹c,前序遍歷c,得到樹根結點,輸出c

遍歷c的左子樹,不存在,則遍歷其右子樹,得到子樹f,前序遍歷f,得到樹根結點f,輸出f

同理,中序遍歷結果:dbgeacf

後序遍歷結果:dgebfca

節點類

public class treenode 

public char getvalue()

public treenode getleft()

public void setleft(treenode left)

public treenode getright()

public void setright(treenode right)

}

人肉構造一棵樹,也就是圖中的那棵樹

public class treecreator 

}

前序遍歷、中序遍歷、後序遍歷**

public class main 

system.out.print(root.getvalue());

preorder(root.getleft());

preorder(root.getright());

}//中序遍歷

public void inorder(treenode root)

inorder(root.getleft());

system.out.print(root.getvalue());

inorder(root.getright());

}//後序遍歷

public void postorder(treenode root)

postorder(root.getleft());

postorder(root.getright());

system.out.print(root.getvalue());

}public static void main(string args)

}

最後的輸出為

總結:樹的遍歷其實就是一種遞迴的過程,三個遍歷的主要區別在於輸出樹根結點的時機

資料結構 樹的遍歷(遞迴遍歷)

樹的遍歷 遞迴遍歷 include include include typedef struct treenodetreenode,treenodepointer 先序遍歷 void printroot treenodepointer root 中序遍歷 void printroot2 treeno...

資料結構 樹的遍歷(前序)

前序遍歷 dlr 前序遍歷也叫做先根遍歷 先序遍歷,可記做根左右。前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹。二叉樹游標前序遍歷類 public class mybitreepreiterator extends myb...

資料結構 樹的廣度遍歷

資料結構中數是一種常見的資料組織方式,在許多的應用場景 現出來了,比如說乙個公司的boss 總經理 副總經理 專案組長 專案組的組員,他們之間的關係就是一種樹型結構,乙個boss下關 經理,總經理關聯多個副總經理,副總經理關聯多個專案組長,專案組長關聯多個組員。我們該如何去獲取某乙個員工的所有下級員...