给出二叉树的自下而上,从右到左的层次遍历算法
时间: 2023-11-27 21:53:47 浏览: 82
二叉树的自下而上,从右到左的层次遍历算法可以通过以下步骤实现:
1. 定义一个队列,并将二叉树的根节点入队。
2. 定义一个栈,用于存储遍历结果。
3. 当队列不为空时,执行以下步骤:
- 弹出队头元素,并将其值存入栈中。
- 如果有右子节点,则将右子节点入队。
- 如果有左子节点,则将左子节点入队。
4. 遍历结束后,依次弹出栈中元素并输出即可得到自下而上、从右到左的层次遍历结果。
以下是 Python 代码实现:
```python
def reverse_level_order(root):
if not root:
return []
q, stack = [root], []
while q:
node = q.pop(0)
stack.append(node.val)
if node.right:
q.append(node.right)
if node.left:
q.append(node.left)
return stack[::-1]
```
其中,`root`为二叉树的根节点,`q`为队列,`stack`为存储遍历结果的栈。代码中使用了 Python 中列表的 pop() 方法来实现队列的出队操作,[::-1]则表示将列表反转。
相关问题
请用c++给出二叉树的自下而上,从右到左的层次遍历算法的完整代码
以下是二叉树的自下而上,从右到左的层次遍历算法的完整代码:
```c++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
vector<vector<int>> levelOrderBottom(TreeNode* root) {
vector<vector<int>> res;
if (root == NULL) return res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int size = q.size();
vector<int> level;
for (int i = 0; i < size; i++) {
TreeNode* node = q.front();
q.pop();
level.push_back(node->val);
if (node->left != NULL) q.push(node->left);
if (node->right != NULL) q.push(node->right);
}
res.push_back(level);
}
stack<vector<int>> st;
for (int i = res.size() - 1; i >= 0; i--) {
st.push(res[i]);
}
vector<vector<int>> ans;
while (!st.empty()) {
ans.push_back(st.top());
st.pop();
}
return ans;
}
int main() {
TreeNode* root = new TreeNode(3);
root->left = new TreeNode(9);
root->right = new TreeNode(20);
root->right->left = new TreeNode(15);
root->right->right = new TreeNode(7);
vector<vector<int>> res = levelOrderBottom(root);
for (int i = 0; i < res.size(); i++) {
for (int j = 0; j < res[i].size(); j++) {
cout << res[i][j] << " ";
}
cout << endl;
}
return 0;
}
```
其中,`levelOrderBottom`函数表示二叉树的自下而上,从右到左的层次遍历。首先使用队列进行常规的层次遍历,然后将结果存储到一个二维数组`res`中。接下来,将`res`数组中的所有元素按照从后往前的顺序依次压入栈中,最后将栈中的元素依次弹出,存储到另一个二维数组`ans`中,即为最终结果。
自下而上,从右到左的层次遍历算法
自下而上,从右到左的层次遍历算法可以用于遍历二叉树或者多叉树,其基本思想是先遍历最后一层节点,然后逐层向上遍历,直到根节点。
具体实现步骤如下:
1. 创建一个队列,将根节点入队;
2. 遍历队列中的每个节点,将其所有子节点(如果有)从右到左依次入队;
3. 将遍历得到的节点值保存到列表中;
4. 重复步骤2和步骤3,直到队列为空。
下面是Python实现代码:
```python
def levelOrderBottom(root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
queue = [root]
res = []
while queue:
level = []
for i in range(len(queue)):
node = queue.pop(0)
level.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
res.insert(0, level)
return res
```
其中,res是一个列表,用于保存遍历结果。每次遍历一层节点后,将该层节点值插入到res的最前面,这样就可以实现自下而上、从右到左的遍历顺序。
阅读全文