📅  最后修改于: 2023-12-03 14:51:23.657000             🧑  作者: Mango
在二叉树的后遍历中,每个节点的访问顺序是左子树->右子树->根节点。因此,如果要查找第n个节点,需要用后遍历的方式遍历二叉树。
下面用C++代码来实现在二叉树的后遍历中查找第n个节点的算法:
/* Definition for a binary tree node. */
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
class Solution {
public:
int index; // 当前查找的节点是第几个
TreeNode* res; // 查找到的第n个节点
void postorder(TreeNode* root, int n) { // 后遍历二叉树
if (root) {
postorder(root->left, n);
postorder(root->right, n);
index++; // 记录当前查找的节点是第几个
if (index == n) {
res = root; // 找到第n个节点了,更新res
}
}
}
TreeNode* findNthNode(TreeNode* root, int n) {
index = 0; // 初始化index
res = nullptr; // 初始化res
postorder(root, n);
return res;
}
};
时间复杂度为O(n),其中n为二叉树的节点数。
使用方法如下:
TreeNode* root = new TreeNode(1);
root->left = new TreeNode(2);
root->right = new TreeNode(3);
root->left->left = new TreeNode(4);
root->left->right = new TreeNode(5);
Solution s;
TreeNode* res = s.findNthNode(root, 3);
if (res) {
cout << res->val << endl; // 输出3
} else {
cout << "Not found!" << endl;
}
以上就是在二叉树的后遍历中查找第n个节点的算法介绍。