📅  最后修改于: 2023-12-03 15:25:45.252000             🧑  作者: Mango
在二叉树上能够看到的节点称为视图,其中顶视图是指从根节点开始,沿着左右孩子节点的路径中第一个出现的节点。本文将介绍如何使用C#编程语言实现打印二叉树的顶视图。
下面是使用C#编写的打印二叉树的顶视图的代码实现。
using System;
using System.Collections.Generic;
public class Node {
public int value;
public Node left, right;
public Node(int value) {
this.value = value;
left = null;
right = null;
}
}
public class BinaryTree {
private Node root;
public BinaryTree(Node root) {
this.root = root;
}
public void PrintTopView() {
Dictionary<int, int> dict = new Dictionary<int, int>();
Queue<KeyValuePair<Node, int>> queue = new Queue<KeyValuePair<Node, int>>();
queue.Enqueue(new KeyValuePair<Node, int>(root, 0));
while (queue.Count > 0) {
KeyValuePair<Node, int> item = queue.Dequeue();
if (!dict.ContainsKey(item.Value)) {
dict.Add(item.Value, item.Key.value);
} else {
dict[item.Value] = item.Key.value;
}
if (item.Key.left != null) {
queue.Enqueue(new KeyValuePair<Node, int>(item.Key.left, item.Value - 1));
}
if (item.Key.right != null) {
queue.Enqueue(new KeyValuePair<Node, int>(item.Key.right, item.Value + 1));
}
if (queue.Count > 0 && item.Value != queue.Peek().Value) {
Console.Write("{0} ", item.Key.value);
}
}
}
}
class Program {
static void Main(string[] args) {
Node node = new Node(1);
node.left = new Node(2);
node.right = new Node(3);
node.left.left = new Node(4);
node.left.right = new Node(5);
node.right.left = new Node(6);
node.right.right = new Node(7);
BinaryTree binaryTree = new BinaryTree(node);
binaryTree.PrintTopView();
}
}
通过上述代码,实现了打印二叉树的顶视图,对于理解和实现树结构有很大的帮助。如果您有任何问题或意见,请在评论区留言。