Полагаю, вы имеете в виду заполнение значения глубины на узле и / или определение максимальной глубины. Один из способов сделать это - использовать два списка и выполнить порядок уровней, как это предлагается. Это было бы сродни:
int level=0;
List<Node> currentLevel = new List<Node>{root};
while(currentLevel.Count != 0)
{
List<Node> nextLevel = new List<Node>{};
foreach(Node node in currentLevel)
{
if(node.Right!=null) nextLevel.Add(node.Right);
if(node.Left != null) nextLevel.Add(node.Left);
node.Depth=level;
}
level++;
currentLevel=nextLevel;
}
По сути, вы перечисляете каждый узел на данном уровне, а затем находите каждый узел на следующем уровне; пока у вас не закончатся узлы / уровни. Очевидно, что список можно заменить практически любым списком, таким как структура данных (связанный список, очередь и т. Д.). И последним значением 'level' будет максимальная глубина + 1. Я подозреваю.
Еще одно уточнение, основанное на повторном прочтении вопроса; если вы ищете узел с определенным значением и хотите найти его глубину, вы должны изменить цикл foreach, добавив в него «if (node.Value == searchValue) return level;». И, технически, если вы ищете конкретное значение, вам следует не выполнять обход уровня заказа, а искать значение, используя соответствующие свойства двоичного дерева (например, val