對於乙個二叉樹,輸出它的垂直遍歷結果;對於同一列的節點,按照從左向右,從上向下的順序排列。
例如,對於以下二叉樹:
1垂直遍歷的結果是:2 1 4 3/ \
2 3 / 4
輸入 - 第一行是n,表示節點個數(節點編號從0到n-1);當n=-1時,表示輸入結束
- 之後的n行,每一行有三個整數,分別表示:節點的數值,左子樹的編號,右子樹的編號(編號-1表示節點為空)
輸出 - 針對每組輸入,輸出垂直遍歷的結果
41 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 而對於樹上的每乙個節點,...