当前位置: 代码迷 >> 综合 >> #实现二叉树先序、中序和后序遍历_Java版 #实现二叉树先序、中序和后序遍历_C++版 #vector、结构体、迭代器、引用 @FDDLC
  详细解决方案

#实现二叉树先序、中序和后序遍历_Java版 #实现二叉树先序、中序和后序遍历_C++版 #vector、结构体、迭代器、引用 @FDDLC

热度:51   发布时间:2024-02-28 04:43:38.0

分别按照二叉树先序,中序和后序打印所有的节点。

示例1

输入

{1,2,3}

输出

[[1,2,3],[2,1,3],[2,3,1]]

 

方法一(Java版)

import java.util.Arrays;public class Solution {public class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;}private int preOrderIndex = 0, inOrderIndex = 0, postOrderIndex = 0;int countNode(TreeNode root) {if(root == null)return 0;return countNode(root.left) + countNode(root.right) + 1;}public int[][] threeOrders(TreeNode root) {int nodeSum = countNode(root);int[][] answer = new int[3][nodeSum];getAnswer(answer, root);return answer;}public void getAnswer(int[][] answer, TreeNode root) {if(root == null)return;answer[0][preOrderIndex++] = root.val;getAnswer(answer, root.left);answer[1][inOrderIndex++] = root.val;getAnswer(answer, root.right);answer[2][postOrderIndex++] = root.val;}public static void main(String[] args) {Solution solution = new Solution();TreeNode rootTree = solution.new TreeNode();rootTree.val = 1;TreeNode leftTree = solution.new TreeNode();leftTree.val = 2;TreeNode rightTree = solution.new TreeNode();rightTree.val = 3;rootTree.left = leftTree;rootTree.right = rightTree;int a[][] = solution.threeOrders(rootTree);System.out.println(Arrays.toString(a[0]));System.out.println(Arrays.toString(a[1]));System.out.println(Arrays.toString(a[2]));}
}

 

方法二(C++版)

#include <bits/stdc++.h>
using namespace std;
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(TreeNode *l, TreeNode *r, int v) {val = v, left = l, right = r;}
};class Solution {
public:void getAnswer(vector<vector<int>> &answer, TreeNode *root) {if(!root)return;answer[0].push_back(root->val);getAnswer(answer, root->left);answer[1].push_back(root->val);getAnswer(answer, root->right);answer[2].push_back(root->val);}vector <vector<int>> threeOrders(TreeNode *root) {vector<vector<int>> answer(3);getAnswer(answer, root);return answer;}
};void printVector(vector<int> a) {for(vector<int>::iterator iterator = a.begin(); iterator != a.end(); iterator++) {cout<<*iterator<<" ";}cout<<endl;
}int main() {TreeNode leftTree = TreeNode(NULL, NULL, 2);TreeNode rightTree = TreeNode(NULL, NULL, 3);TreeNode rootTree = TreeNode(&leftTree, &rightTree, 1);Solution solution;vector<vector<int>> answer = solution.threeOrders(&rootTree);printVector(answer[0]);printVector(answer[1]);printVector(answer[2]);return 0;
}