基於先序遍歷 輸出二叉樹葉子節點的路徑 非遞迴

2021-08-17 08:30:35 字數 1818 閱讀 1304

基於先序遍歷 輸出二叉樹葉子節點的路徑(非遞迴)

思路:

1. 先序遍歷二叉樹,入棧,直到訪問到葉子節點;

2. 如果達到葉子節點,遍歷當前棧,獲取當前葉子節點的路徑;然後進入回退模式,直到有新的右節點。

3. 在回退的過程中,如果是父節點為了不再重複進入進入左右子樹,使用乙個pre指標指向最近回退點(pre肯定是當前父節點的左或右孩子)。

定義節點,為了簡化,省略訪問修飾、泛型、get&set、null ……

public

class

treenode

public

treenode(object value)

public

treenode(object value, treenode left, treenode right)

}

遍歷方法:

public

static

void

main(string args)

}public

static listgettreeallpath(treenode root)

top = s.peek();

if (top.right != null && top.right != pre) else

pre = s.pop();//(back mode) back until new right node

}} while (!s.isempty());

return pathlist;

}private

static string getpath(stacks, string sp)

}return buf.tostring();

}public

static treenode buildtree()

treenode root = nodes[1];

root.left = nodes[2];

root.right = nodes[6];

nodes[2].left = nodes[3];

nodes[2].right = nodes[5];

nodes[3].left = nodes[4];

nodes[3].right = null;

nodes[4].left = null;

nodes[4].right = nodes[9];

nodes[9].left = nodes[10];

nodes[9].right = nodes[11];

nodes[6].left = nodes[7];

nodes[6].right = nodes[8];

return root;

}

如下面的二叉樹

輸出結果:

*****= tree all path *****====

path: 1

->

2->

3->

4->

9->

10path: 1

->

2->

3->

4->

9->

11path: 1

->

2->

5path: 1

->

6->

7path: 1

->

6->

8

輸出二叉樹葉子節點 葉子節點數目 二叉樹高度

include include 輸出二叉樹葉子節點 葉子節點數目 二叉樹高度 include typedef int datatype int count 0 用於統計葉子節點的數目 typedef struct node bitnode,bittree void creatbitree bittr...

二叉樹葉子個數

資料結構實驗之二叉樹七 葉子問題 time limit 1000ms memory limit 65536k 題目描述 已知乙個按先序輸入的字串行,如abd,eg,cf,其中,表示空結點 請建立該二叉樹並按從上到下從左到右的順序輸出該二叉樹的所有葉子結點。輸入輸入資料有多行,每一行是乙個長度小於50...

完全二叉樹葉子節點的個數

題目 乙個具有n個節點的完全二叉樹,其葉子節點的個數為多少?分析 設葉子節點個數為n0,度為1的節點個數為n1,度為2的節點個數為n2 側有 n0 n1 n2 n 1 對於二叉樹有 n0 n2 1 2 由 1 2 n0 n 1 n1 2 3 由完全二叉樹的性質可知 n1 0 或 1 總結 a 當n1...