004 二叉樹垂直遍歷

2021-08-02 09:41:06 字數 1752 閱讀 9818

對於乙個二叉樹,輸出它的垂直遍歷結果;對於同一列的節點,按照從左向右,從上向下的順序排列。

例如,對於以下二叉樹:

1

/ \

2 3 / 4

垂直遍歷的結果是:2 1 4 3

輸入 - 第一行是n,表示節點個數(節點編號從0到n-1);當n=-1時,表示輸入結束

- 之後的n行,每一行有三個整數,分別表示:節點的數值,左子樹的編號,右子樹的編號(編號-1表示節點為空)

輸出 - 針對每組輸入,輸出垂直遍歷的結果

4

1 1 2

2 -1 -1

3 3 -1

4 -1 -1

-1

2 1 4 3

#include 

#include

#include

#include

#include

#include

using

namespace

std;

struct node ;

class treeprint

void display()

};int main()

treeprint tp;

tp.dfs(&tree[0], 0);

tp.display();

in >> n;

}in.close();

return

0;}

然而這個結果並不正確,不能妥善的處理孩子節點超過父節點的深度的情況。

#include 

#include

#include

#include

#include

#include

using

namespace

std;

struct node ;

class treeprint

void bfs(node *root)

if (tmp->right != null) }}

void display()

};int main()

treeprint tp;

tp.bfs(&tree[0]);

tp.display();

in >> n;

}in.close();

return

0;}

由於輸入的時候就是bfs遍歷,所以輸入的時候就可以進行排序

#include 

#include

#include

#include

using

namespace

std;

struct node ;

bool compareto(node &l, node &r)

int main()

if (right != -1)

}sort(tree, tree+n, &compareto);

for (int i=0; iprintf("%d ", tree[i].data);

}printf("\n");

in >> n;

}in.close();

return

0;}

314 二叉樹的垂直遍歷

題目描述 給定乙個二叉樹,返回其結點 垂直方向 從上到下,逐列 遍歷的值。如果兩個結點在同一行和列,那麼順序則為 從左到右。示例 1 輸入 3,9,20,null,null,15,7 輸出 9 3,15 20 7 示例 2 輸入 3,9,8,4,0,1,7 輸出 4 9 3,0,1 8 7 示例 3...

構建二叉樹 遍歷二叉樹

陣列法構建二叉樹 public class main public static void main string args 用陣列的方式構建二叉樹 public static void createbintree 把linkedlist集合轉成二叉樹的形式 for int j 0 j 最後乙個父節...

二叉樹遍歷

二叉樹的遍歷非常重要,但對已一棵比較複雜的樹,要寫出它的先 中 後序遍歷,往往不是那麼簡單,也很容易犯錯。這裡介紹一種比較直觀且不容易犯錯的方法。對於圖1所示的二叉樹,要寫出它的先 中 後序遍歷,往往很容易出錯。圖 1 其實,我們可以用圖2中的紅線描畫出二叉樹的輪廓。圖 2 而對於樹上的每乙個節點,...