給你二叉樹的根結點 root ,請你設計演算法計算二叉樹的 垂序遍歷 序列。
對位於 (row, col) 的每個結點而言,其左右子結點分別位於 (row + 1, col - 1) 和 (row + 1, col + 1) 。樹的根結點位於 (0, 0) 。
二叉樹的 垂序遍歷 從最左邊的列開始直到最右邊的列結束,按列索引每一列上的所有結點,形成乙個按出現位置從上到下排序的有序列表。如果同行同列上有多個結點,則按結點的值從小到大進行排序。
返回二叉樹的 垂序遍歷 序列。
示例 1:
輸入:root = [3,9,20,null,null,15,7]
輸出:[[9],[3,15],[20],[7]]
解釋:列 -1 :只有結點 9 在此列中。
列 0 :只有結點 3 和 15 在此列中,按從上到下順序。
列 1 :只有結點 20 在此列中。
列 2 :只有結點 7 在此列中。
示例 2:
輸入:root = [1,2,3,4,5,6,7]
輸出:[[4],[2],[1,5,6],[3],[7]]
解釋:列 -2 :只有結點 4 在此列中。
列 -1 :只有結點 2 在此列中。
列 0 :結點 1 、5 和 6 都在此列中。
1 在上面,所以它出現在前面。
5 和 6 位置都是 (2, 0) ,所以按值從小到大排序,5 在 6 的前面。
列 1 :只有結點 3 在此列中。
列 2 :只有結點 7 在此列中。
示例 3:
先遍歷樹找出輸出陣列的長度,再次遍歷樹並儲存每個節點的深度和值,將節點插入對應橫座標的列表,最後再排序
class solution );
}vector> ans;
for (auto & list : res)
ans.push_back(temp);
}return ans;
}void dfs(treenode* root, vector>>& res, int i, int depth) );
}if (root->left)
dfs(root->left, res, i - 1, depth+1);
if (root->right)
dfs(root->right, res, i + 1, depth+1);
}void getrange(treenode* root, int index)
};
複雜度
n 表示節點個數
時間複雜度:o(n)
空間複雜度:o(n)
987 二叉樹的垂序遍歷
給定二叉樹,按垂序遍歷返回其結點值。對位於 x,y 的每個結點而言,其左右子結點分別位於 x 1,y 1 和 x 1,y 1 把一條垂線從x infinity移動到x infinity,每當該垂線與結點接觸時,我們按從上到下的順序報告結點的值 y座標遞減 如果兩個結點位置相同,則首先報告的結點值較小...
987 二叉樹的垂序遍歷
給定二叉樹,按垂序遍歷返回其結點值。對位於 x,y 的每個結點而言,其左右子結點分別位於 x 1,y 1 和 x 1,y 1 把一條垂線從 x infinity 移動到 x infinity 每當該垂線與結點接觸時,我們按從上到下的順序報告結點的值 y 座標遞減 如果兩個結點位置相同,則首先報告的結...
演算法題 二叉樹的中序遍歷
題目描述 給定乙個二叉樹,返回它的中序 遍歷。示例 輸入 1,null,2,3 1 2 3輸出 1,3,2 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?解法一通過遞迴實現。時間複雜度 o n 空間複雜度 平均是o logn 樹的高度 最壞是o n 當樹退化成煉表時 definition fo...