樹的先序遍歷

2021-08-02 04:13:19 字數 863 閱讀 3241

先序遍歷順序:根=>左=>右

對於任一結點p:

1.訪問結點p,並將結點p入棧;

2.判斷結點p的左孩子是否為空,若為空,則取棧頂結點並進行出棧操作,並將棧頂結點的右孩子置為當前的結點p,迴圈至1);若不為空,則將p的左孩子置為當前的結點p;

3.直到p為null並且棧為空,則遍歷結束

所以:(1)先將根節點入棧,並訪問

(2)判斷是否有左子樹,如果有,將當前p入棧

(3)若當前節點沒有左子樹,判斷其有沒有右子樹,若有,將其右子樹的值給p,若棧已經被去空,將p置為空

(4)若右子樹為空,用迴圈遍歷,將stack中棧頂值pop給p,再判斷其右子樹是否存在,存在將值給p後跳出,不存在就將p置為null;

非遞迴方法:

publicstaticvoidgetvaluefwithloop(treenodenode, list

outarr)//先序

else//左子樹為空

if (stack.count

== 0)//如果棧已經被取空

else//右子樹為空

else

p = null;//p=null }

} } }

}遞迴方法:

publicstaticvoidgetvaluef(treenodenode, list

outarr)//list中存遍歷後的節點,outarr存節點中的值

outarr.add

(node.value);//傳入節點值給list///訪問節點

if (node.left != null)//遍歷左子樹

if (node.right != null)//遍歷右子樹

}

樹的遍歷 先序遍歷 中序遍歷 後序遍歷

名詞解釋 1 每個元素稱為節點 2 有乙個特定的節點被稱為根節點或樹根 3 除根節點外的其餘資料元素被分為m個互不相交的集合t1,t2,t3.tm 1,其中每乙個集合ti本身也是乙個樹,被稱作原樹的子樹 節點的度 乙個節點含有子樹的個數稱為該節點的度 葉節點或終端節點 度為0的節點稱為葉節點 非終端...

樹 先序中序後序遍歷

題目分析 題目描述 description 求一棵二叉樹的前序遍歷,中序遍歷和後序遍歷 輸入描述 input description 第一行乙個整數n,表示這棵樹的節點個數。接下來n行每行2個整數l和r。第i行的兩個整數li和ri代表編號為i的節點的左兒子編號和右兒子編號。輸出描述 output d...

樹的遍歷(中序 先序 後續)

先序遍歷 也叫做先根遍歷 前序遍歷 可記做根左右 二叉樹父結點向下先左後右 首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷左 右子樹時,仍然先訪問根結點,然後遍歷左子樹,最後遍歷右子樹,如果二叉樹為空則返回。例如上樹的遍歷順序是a bd e c f 中序遍歷 ldr 是 二叉樹遍歷 的一種,也...