演算法31 leetcode102 二叉樹的層序遍歷
阿新 • • 發佈:2021-12-06
先怎麼想不出遞迴解法,想到只能用BFS佇列。。。
BFS
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> v; if(root==nullptr) return v; queue<TreeNode*> qu; qu.push(root); while(!qu.empty()){ int lt=qu.size(); vector<int> vn;//一維陣列 for(int i=0;i<lt;i++){ TreeNode *tp=qu.front(); vn.push_back(tp->val); qu.pop(); if(tp->left) qu.push(tp->left); if(tp->right) qu.push(tp->right); } v.push_back(vn);//二維陣列 } return v; } };
遞迴解法DFS
public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> res = new ArrayList<>(); levelHelper(res, root, 0); return res; } public void levelHelper(List<List<Integer>> list, TreeNode root, int level) { //邊界條件判斷 if (root == null) return; //level表示的是層數,如果level >= list.size(),說明到下一層了,所以 //要先把下一層的list初始化,防止下面add的時候出現空指標異常 if (level >= list.size()) { list.add(new ArrayList<>()); } //level表示的是第幾層,這裡訪問到第幾層,我們就把資料加入到第幾層 list.get(level).add(root.val); //當前節點訪問完之後,再使用遞迴的方式分別訪問當前節點的左右子節點 levelHelper(list, root.left, level + 1); levelHelper(list, root.right, level + 1); }