分别按照二叉树先序,中序和后序打印所有的节点。
先序:根左右
中序:左根右
后序:左右根
首先定义向量数组results[3],然后调用周游函数travel,判断条件使用根节点是否为空。
周游方式使用递归实现。
先序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,输出根节点
【ret[0].push_back(root->val);】
3.左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
4. 右子树判定,有节点进行递归输出,没节点结束周游函数,返回主函数
【travel(root->right,ret);】
中序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
3.输出根节点
【ret[1].push_back(root->val);】
4. 右子树判定,有节点进行递归输出,没节点结束周游函数,返回主函数
【travel(root->right,ret);】
后序遍历:
1.判断根节点是否为空
【if(root)】
2.非空进入循环,左子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->left,ret);】
3.右子树判定,有节点进行递归输出,没节点进行下一步
【travel(root->right,ret);】
4. 输出根节点,结束周游函数,返回主函数
【ret[2].push_back(root->val);】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; */ class Solution { public: void travel(TreeNode *root,vector<vector<int>> &ret){ if(root){ ret[0].push_back(root->val); travel(root->left,ret); ret[1].push_back(root->val); travel(root->right,ret); ret[2].push_back(root->val); } } vector<vector<int> > threeOrders(TreeNode* root) { vector<vector<int>>results(3); travel(root,results); return results; } };
最后
以上就是善良橘子最近收集整理的关于二叉树三种遍历方式递归实现分别按照二叉树先序,中序和后序打印所有的节点。的全部内容,更多相关二叉树三种遍历方式递归实现分别按照二叉树先序,中序和后序打印所有内容请搜索靠谱客的其他文章。
发表评论 取消回复