迭代法求二叉树高度
二叉树是一种数据结构。二叉树的每个节点包含0、1或2个子节点。因此,二叉树可以包含多个层次。
这里,我们需要使用循环编写迭代代码来查找二叉树的高度。二叉树中的总层数代表二叉树的高度。或者,我们可以说从根节点到二叉树的最大深度就是二叉树的高度。
问题陈述 - 我们给定一个二叉树。我们需要使用迭代方法来查找给定二叉树的高度。
方法一
如上所述,二叉树的高度等于二叉树的总层数。我们将使用队列数据结构遍历每一层的每个节点,并找到树的最大深度。
算法
步骤1 - 定义 'treeNode' 类,并添加 'val' 整型变量。还在类中定义 'left' 和 'right' 指针。
步骤2 - 定义 createNode() 函数来为树创建新节点。它创建一个新的 treeNode,用参数值初始化 'val',用空值初始化 left 和 right 指针。最后,它返回新创建的节点。
步骤3 - findHeight() 函数用于查找二叉树的高度。
步骤4 - 定义队列 'levelqueue' 用于存储当前层的所有节点,'treeHeight','n_cnt' 变量和 'temp' 节点。
步骤5 - 如果头节点为空,则返回 0。
步骤6 - 将头节点推入 'levelQueue'。
步骤7 - 使用 'while' 循环进行迭代,直到 'levelQueue' 变为空。
步骤8 - 将 'treeHeight' 加 1,并将 'n_cnt' 初始化为队列的大小,表示当前层中的总节点数。
步骤9 - 遍历队列的所有元素。
步骤9.1 - 弹出队列的第一个元素。
步骤9.2 - 如果当前节点存在左子节点,则将其插入队列。
步骤9.3 - 如果当前节点存在右子节点,则将其插入队列。
步骤9.4 - 从队列中移除第一个节点。
步骤10 - 返回 'treeHeight' 变量的值。
示例
#include <iostream>
#include <queue>
using namespace std;
class treeNode {
public:
int val;
treeNode *left;
treeNode *right;
};
treeNode *createNode(int val) {
//Create a new node
treeNode *temp = new treeNode();
temp->val = val;
temp->left = NULL;
temp->right = NULL;
return temp;
}
int fidHeight(treeNode *head) {
queue<treeNode *> levelQueue;
int treeHeight = 0; // To store the tree height of the current binary tree
int n_cnt = 0; // To store the total number of current level nodes.
treeNode *temp; // Pointer to store the address of a node in the current level.
// For empty binary tree
if (head == NULL) {
return 0;
}
// Add root node to queue
levelQueue.push(head);
// Traverse level of binary tree
while (!levelQueue.empty()) {
// For each level increment, the treeHeight of the three
treeHeight++;
n_cnt = levelQueue.size();
// Add child nodes of all nodes at the current level
while (n_cnt--) {
temp = levelQueue.front();
// Insert the left child node of the current node
if (temp->left != NULL) {
levelQueue.push(temp->left);
}
// Insert the right child node of the current node
if (temp->right != NULL) {
levelQueue.push(temp->right);
}
// remove the current node
levelQueue.pop();
}
}
return treeHeight;
}
int main() {
treeNode *head = NULL;
// Adding nodes to binary tree.
head = createNode(45);
head->right = createNode(32);
head->right->left = createNode(48);
head->left = createNode(90);
head->left->left = createNode(5);
head->left->left->left = createNode(50);
cout << "The given binary tree's treeHeight is " << fidHeight(head) << ".";
return 0;
}
输出
The given binary tree's treeHeight is 4.
时间复杂度 - O(N) 遍历每个节点。
空间复杂度 - O(N) 用于在队列中存储节点。
迭代方法总是比递归方法更快地解决任何问题。在这里,我们使用循环和队列迭代地找到二叉树的最大深度或高度。但是,程序员可以尝试编写递归方法的代码来查找二叉树的高度。
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP