2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
अयं प्रश्नः अद्यापि लेयर क्रमिक-भ्रमणस्य विषये अस्ति, परन्तु प्रक्रिया किञ्चित् भिन्ना अस्ति ।
अस्य प्रश्नस्य विषये मम प्रारम्भिकं चिन्तनं गलतम् आसीत् यतोहि अहं प्रारम्भे अस्य चित्रस्य आधारेण तस्य विषये चिन्तितवान् । मया चिन्तितम् यत् मम केवलं प्रत्येकस्य स्तरस्य अन्तिमः नोड् विस्तारः करणीयः अस्ति तथा च तत् एव । तथापि वस्तुतः तत् गलतम् अस्ति। यदि भवान् एतत् विचारं अनुसरति तर्हि यदि उपरिष्टात् चित्रे नोड् ४ नास्ति तर्हि नोड् ५ परिणामसमूहे सर्वथा योजयितुं न शक्यते । अतः एषः विचारः प्रशस्तः नास्ति।
सम्यक् विचारः : १.
उपर्युक्तस्थितेः निवारणाय वामपक्षस्य विस्तारः अपि कर्तुं शक्यते । अतः सम्यक् संचालनम् अस्ति। प्रत्येकं स्तरं प्रत्येकं नोड् च विस्तारयितुं आवश्यकं भवति, परन्तु प्रत्येकस्य स्तरस्य अन्तिमतत्त्वं एव परिणामसमूहे योजयितुं आवश्यकम् ।
परिणामसमूहे योजनीयं अन्तिमं तत्त्वं कथं लिखितव्यम्?
प्रत्येकं स्तरः आकारस्य उपयोगं करोति, अतः for लूप् इत्यस्य समये गणनायां ध्यानं ददातु, अन्तिमे च परिणामान् संग्रहयन्तु ।
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> result = new ArrayList<>();
Deque<TreeNode> que = new ArrayDeque<>();
if(root==null){
return result;
}
que.offerLast(root);
while(!que.isEmpty()){
int size = que.size();
for(int i = 0;i<size;i++){
TreeNode temp = que.pollFirst();
if(i==size-1){
result.add(temp.val);
}
if(temp.left!=null){
que.offerLast(temp.left);
}
if(temp.right!=null){
que.offerLast(temp.right);
}
}
}
return result;
}
}
केवलं प्रत्येकस्य स्तरस्य औसतमूल्यं ज्ञातव्यम् ।अद्यापि बोर्डप्रश्नः अस्ति
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> result = new ArrayList<>();
Deque<TreeNode> que = new ArrayDeque<>();
if(root==null){
return result;
}
que.offerLast(root);
while(!que.isEmpty()){
int size = que.size();
double sum = 0;
double avg = 0;
for(int i = 0;i<size;i++){
TreeNode temp = que.pollFirst();
sum += temp.val;
if(temp.left!=null){
que.offerLast(temp.left);
}
if(temp.right!=null){
que.offerLast(temp.right);
}
}
avg = sum/size;
result.add(avg);
}
return result;
}
}
इदमपि टेम्पलेट् प्रश्नः अस्ति, केवलं प्रत्येकं पङ्क्तिं संसाधयन् अधिकतमं मूल्यं निर्वाहयन्तु ।
केवलं स्मर्तव्यं यत् int इत्यस्य न्यूनतमं मूल्यं Integer.MIN_VALUE अस्ति ।
class Solution {
public List<Integer> largestValues(TreeNode root) {
List<Integer> result = new ArrayList<>();
Deque<TreeNode> que = new ArrayDeque<>();
if(root==null){
return result;
}
que.offerLast(root);
while(!que.isEmpty()){
int size = que.size();
int max = Integer.MIN_VALUE;
for(int i = 0;i<size;i++){
TreeNode temp = que.pollFirst();
if(temp.val > max){
max = temp.val;
}
if(temp.left!=null){
que.offerLast(temp.left);
}
if(temp.right!=null){
que.offerLast(temp.right);
}
}
result.add(max);
}
return result;
}
}
अहं केवलं विस्तारविधिं परिवर्तयामि वाम-दक्षिण-उपवृक्षयोः विस्तारस्य स्थाने, अहं प्रत्यक्षतया बालसूचीं स्टैक् मध्ये योजितवान् ।
तस्मिन् एकः विधिः प्रयुक्तः अस्ति यस्याः शिक्षणं आवश्यकम् अस्ति।
ArrayDeque Deque कार्यान्वितं करोति, Deque च Queue अन्तरफलकं उत्तराधिकारं प्राप्नोति, Queue च Collection अन्तरफलकं उत्तराधिकारं प्राप्नोति, अतः अस्य addAll मेथड् अस्ति । addAll इत्यस्य पैरामीटर्स् इत्यस्य विषये तस्य पैरामीटर् प्रकारः Collection प्रकारः अस्ति, यस्य अर्थः अस्ति यत् सः Collection इत्यस्य अन्तरफलकं कार्यान्वितं किमपि वस्तु प्राप्तुं शक्नोति । अस्मिन् भवन्तः चिन्तयितुं शक्नुवन्ति प्रत्येकं एकं स्तम्भसंरचना अन्तर्भवति ।
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> result = new ArrayList<>();
Deque<Node> que = new ArrayDeque<>();
if(root == null){
return result;
}
que.offerLast(root);
while(!que.isEmpty()){
int size = que.size();
List<Integer> curList = new ArrayList<>();
while(size>0){
Node temp = que.pollFirst();
curList.add(temp.val);
//就是扩展方式变了,变为直接把子节点全部加入到队列中,这也等价于将里面的每个元素从尾部依次加入队列当中。
que.addAll(temp.children);
size--;
}
result.add(curList);
}
return result;
}
}
विचारः- स्तर-क्रमिक-परिभ्रमणात् भेदः अस्ति यत् प्रत्येकं स्तरं संसाधयन् परिवर्तनं भवति । प्रत्येकं स्तरं प्राप्य प्रथमं नोडं पृथक् निष्कासयितुं आवश्यकं भवति अवश्यं, तत् बहिः निष्कास्य प्रथमं विस्तारितव्यम्, यतः अद्यापि अग्रिमः स्तरः अस्ति । ततः स्तरस्य अवशिष्टानि नोड्स् भ्रमितुं आरभत । पारगमनं मुख्यतया वर्तमान que इत्यस्य आकारेण कार्यान्वितं भवति यतः अस्य स्तरस्य प्रथमः नोड् बहिः कृतः अस्ति, अतः traversal इत्यस्य समये i =1 तः आरभ्यते । प्रत्येकस्य नोडस्य संसाधनकाले यत् कर्तव्यं तत् सूचनस्य परिवर्तनं करणीयम् । अर्थात् प्रथमस्य नोड् इत्यस्य अग्रिमः नोड् पश्चात् स्टैक् तः पोप् कृतं द्वितीयं नोड् इत्येतम् सूचयति, ततः cur अग्रिमम् गच्छति । तथा च अस्मिन् क्रमे वाम-दक्षिण-बाल-नोड्-इत्येतयोः विस्तारं कर्तुं स्मर्यताम् ।
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public Node connect(Node root) {
Deque<Node> que = new ArrayDeque<>();
if(root==null){
return root;
}
que.offerLast(root);
while(!que.isEmpty()){
//每层先取出第一个节点
int size = que.size();
Node cur = que.pollFirst();
//扩展它
if(cur.left!=null){
que.offerLast(cur.left);
}
if(cur.right!=null){
que.offerLast(cur.right);
}
for(int i = 1;i<size;i++){
Node next = que.pollFirst();
if(next.left!=null){
que.offerLast(next.left);
}
if(next.right!=null){
que.offerLast(next.right);
}
cur.next = next;
cur = next;
}
}
return root;
}
}