1 00:00:00,000 --> 00:00:02,770 [Powered by Google Translate] [অনুচ্ছেদ 7: আরো আরামদায়ক] 2 00:00:02,770 --> 00:00:05,090 [Rob Bowden] [হার্ভার্ড বিশ্ববিদ্যালয়] 3 00:00:05,090 --> 00:00:07,930 [এটি CS50] [CS50.TV] 4 00:00:07,930 --> 00:00:10,110 ঠিক আছে. তাই আমার মত আমি ইমেলে বলেন, 5 00:00:10,110 --> 00:00:14,060 এই ট্রি একটি বাইনারি--নিবিড় অধ্যায় হতে চলেছে. 6 00:00:14,060 --> 00:00:16,820 কিন্তু যে অনেক প্রশ্নই নেই. 7 00:00:16,820 --> 00:00:18,920 তাই আমরা চেষ্টা এবং প্রতিটি প্রশ্নের আঁকা আউট চলুন 8 00:00:18,920 --> 00:00:25,430 সমস্ত জিনিসগুলি সর্বোত্তম উপায়ে বেদনাদায়ক বিস্তারিত মধ্যে এবং যান. 9 00:00:25,430 --> 00:00:31,200 সুতরাং অধিকার শুরুতে, আমরা বাইনারি গাছ এবং পণ্যদ্রব্য নমুনা অঙ্কন দিয়ে যান. 10 00:00:31,200 --> 00:00:35,970 তাই এখানে, "মনে রাখবেন যে, একটি বাইনারি গাছ নোড অনুরূপ একটি লিঙ্ক তালিকায় যারা আছে, 11 00:00:35,970 --> 00:00:38,150 বাম 'শিশু' জন্য এক: পরিবর্তে এক পয়েন্টার ছাড়া দুটি আছে 12 00:00:38,150 --> 00:00:41,950 এবং একটি অধিকার 'শিশু' জন্য. " 13 00:00:41,950 --> 00:00:45,630 সুতরাং একটি বাইনারি গাছ শুধু একটি তালিকা সংযুক্ত ভালো হয়, 14 00:00:45,630 --> 00:00:47,910 struct ছাড়া দুটি পয়েন্টার আছে যাচ্ছে. 15 00:00:47,910 --> 00:00:51,390 Trinary গাছ, যার তিনটি পয়েন্টার পাবেন আছে, 16 00:00:51,390 --> 00:00:56,540 n-Ary গাছ, যা শুধু একটি জেনেরিক পয়েন্টার আছে 17 00:00:56,540 --> 00:01:00,320 যে তাহলে malloc যাও পর্যাপ্ত স্থান আছে আছে 18 00:01:00,320 --> 00:01:04,840 সম্ভাব্য সব বাচ্চাদের যথেষ্ট পয়েন্টার দেয়া হল. 19 00:01:04,840 --> 00:01:08,200 সুতরাং বাইনারি গাছ শুধু একটি দুটি ধ্রুব সংখ্যা আছে এরকম. 20 00:01:08,200 --> 00:01:11,260 আপনি যদি চান, আপনি এমন একটি ইউনারী ট্রি হিসাবে যুক্ত তালিকা দিতে পারেন, 21 00:01:11,260 --> 00:01:15,360 কিন্তু আমি যে কেউ কল এটা যে না মনে হয়. 22 00:01:15,360 --> 00:01:18,060 "একটি একটি বাইনারি গাছ নোডের মধ্যে বাক্সে--তীর এবং ডায়াগ্রাম আঁকুন 23 00:01:18,060 --> 00:01:24,110 Nate এর প্রিয় সংখ্যা, 7, যেখানে প্রতিটি সন্তানের নাল পয়েন্টার হয়. ধারণকারী " 24 00:01:24,110 --> 00:01:27,780 সুতরাং রহমান মোড. 25 00:01:27,780 --> 00:01:30,280 >> এটি প্রশংসনীয় সহজবোধ্য হতে যাচ্ছে. 26 00:01:30,280 --> 00:01:36,150 আমরা ঠিক করছি একটি নোড আছে যাচ্ছে, আমি একটি বর্গক্ষেত্র আঁকতে হিসাবে এটা করব. 27 00:01:36,150 --> 00:01:38,730 এবং আমি এখানে মান আঁকা হবে. 28 00:01:38,730 --> 00:01:41,090 তাই মান এখানে যেতে হবে, 29 00:01:41,090 --> 00:01:44,770 এবং তারপর এখানে আমরা নিচে বাম এবং ডান বাম পয়েন্টার ডান পয়েন্টার থাকবে. 30 00:01:44,770 --> 00:01:50,430 এবং এটা খুবই অনেক তাই প্রচল এটি বাম এবং ডান, পয়েন্টার নাম কল. 31 00:01:50,430 --> 00:01:52,460 এই দুটি যাও নাল হতে যাচ্ছে. 32 00:01:52,460 --> 00:01:57,870 এটা ঠিক করা নাল, এবং ঠিক করা হবে যে নাল হবে. 33 00:01:57,870 --> 00:02:03,630 ঠিক আছে. এখানে তাই ব্যাক. 34 00:02:03,630 --> 00:02:05,700 "একটি লিঙ্ক তালিকা দিয়ে, আমরা কেবল একটি পয়েন্টার সঞ্চয় ছিল 35 00:02:05,700 --> 00:02:09,639 যাও তালিকা যাতে পুরো লিঙ্ক তালিকা, বা সম্পূর্ণ তালিকা মনে প্রথম নোডের. 36 00:02:09,639 --> 00:02:11,650 গাছ সঙ্গে একইভাবে, আমরা কেবল একটি পয়েন্টার সঞ্চয় আছে 37 00:02:11,650 --> 00:02:13,420 একটি নোডের মধ্যে অর্ডার পুরো ট্রি মনে. 38 00:02:13,420 --> 00:02:15,980 এই নোডের হয় calle ট্রি 'রুট'. 39 00:02:15,980 --> 00:02:18,320 আগে থেকে আপনার উপর ডায়াগ্রাম তৈরি করুন বা একটি নতুন আঁকা 40 00:02:18,320 --> 00:02:21,690 যেমন যে আপনি এমন একটি বাইনারি ট্রি বাক্সে এবং--তীরচিহ্ন প্রতিকৃতি আছে 41 00:02:21,690 --> 00:02:25,730 সঙ্গে মান 7, বাম তারপর 3, 42 00:02:25,730 --> 00:02:32,760 ডান তারপর 9, এবং তারপর 6 3 অধিকার. " 43 00:02:32,760 --> 00:02:34,810 চলুন যদি আমার মাথা যে সব মনে করতে পারেন দেখুন. 44 00:02:34,810 --> 00:02:37,670 তাই এই আমাদের রুট এখানে আপ হবে. 45 00:02:37,670 --> 00:02:41,600 আমরা কিছু পয়েন্টার কোথাও আছে, যা আমরা রুট ডাকবো করব, 46 00:02:41,600 --> 00:02:45,140 এবং এটি এই লোক এর প্রতি নির্দেশ যাও. 47 00:02:45,140 --> 00:02:48,490 এখন একটি নতুন নোডের জন্য, 48 00:02:48,490 --> 00:02:52,870 না কি আমরা বাম দিকে আছে 3,? 49 00:02:52,870 --> 00:02:57,140 সুতরাং একটি 3 সঙ্গে নতুন নোড, এবং এটি প্রাথমিকভাবে পয়েন্ট নাল. 50 00:02:57,140 --> 00:02:59,190 আমি শুধু এন রেখে দেব 51 00:02:59,190 --> 00:03:02,250 এখন আমরা 7 বাঁদিকে যে যেতে করতে চাই. 52 00:03:02,250 --> 00:03:06,840 তাই আমরা এখন এই লোক নির্দেশ এই পয়েন্টার পরিবর্তন. 53 00:03:06,840 --> 00:03:12,420 এবং আমরা একই কাজ. আমরা এখানে একটি 9 চান 54 00:03:12,420 --> 00:03:14,620 যা প্রথমে ঠিক বলেছেন নাল. 55 00:03:14,620 --> 00:03:19,600 আমরা 9 ​​এই পয়েন্টার, পয়েন্ট পরিবর্তন করতে যাচ্ছেন, 56 00:03:19,600 --> 00:03:23,310 এবং এখন আমরা 3 ডান 6 লাগাতে চান. 57 00:03:23,310 --> 00:03:32,170 সুতরাং যাচ্ছে - একটি 6 করা. 58 00:03:32,170 --> 00:03:34,310 এবং যে তামাশা করা নির্দেশ আছে. 59 00:03:34,310 --> 00:03:38,320 ঠিক আছে. সুতরাং যে সব এটি কি আমাদের জানাবে. 60 00:03:38,320 --> 00:03:42,770 >> এখন আসুন কিছু পরিভাষা পুনরালোচনা. 61 00:03:42,770 --> 00:03:46,690 আমরা ইতিমধ্যে কিভাবে ট্রি রুট হল ট্রির উপরের সবচেয়ে নোড সম্পর্কে বললাম. 62 00:03:46,690 --> 00:03:54,720 এক ধারণকারী 7. গাছ নীচে নোড পাতার বলা হয়. 63 00:03:54,720 --> 00:04:01,240 কোন নোড যা শুধু আছে তার শিশু হিসাবে নাল একটি গাছের পাতা. 64 00:04:01,240 --> 00:04:03,680 সুতরাং এটা সম্ভব, যদি আমাদের বাইনারি গাছ হয় কেবলমাত্র একটি নোড, 65 00:04:03,680 --> 00:04:10,130 যে একটি গাছ একটি গাছের পাতা, এবং যে এটি. 66 00:04:10,130 --> 00:04:12,060 "ট্রি 'উচ্চতা' হল হপস সংখ্যা আপনাকে করতে হবে 67 00:04:12,060 --> 00:04:16,620 উপর থেকে একটি গাছের পাতা যাও. পেতে " 68 00:04:16,620 --> 00:04:18,640 আমরা মধ্যে, একটি দ্বিতীয় পেতে পার্থক্য, করব 69 00:04:18,640 --> 00:04:21,940 মধ্যে সুষম এবং অসম বাইনারি গাছ, 70 00:04:21,940 --> 00:04:29,470 কিন্তু এখন জন্য, এই গাছ সামগ্রিক উচ্চতা 71 00:04:29,470 --> 00:04:34,520 আমি 3, বলতে হবে, যদিও আপনি যদি হপস সংখ্যা গণনা 72 00:04:34,520 --> 00:04:39,710 আপনি অর্ডার 9 পেতে না থাকে তবে, এটা আসলে শুধুমাত্র 2 একটি উচ্চতা. 73 00:04:39,710 --> 00:04:43,340 রাইট এখন এই একটি অসম বাইনারি গাছ, 74 00:04:43,340 --> 00:04:49,840 কিন্তু আমরা সুষম সম্পর্কে হলে তা প্রাসঙ্গিক হতে পায় সায়ীদ করব. 75 00:04:49,840 --> 00:04:52,040 সুতরাং এখন আমরা একটি ট্রি বিভিন্ন নোডের সম্পর্কে পদ কথা বলতে পারেন 76 00:04:52,040 --> 00:04:54,700 আপেক্ষিক যাও ট্রি অন্যান্য নোড. 77 00:04:54,700 --> 00:04:59,730 তাই এখন আমরা বাবা, সন্তান, ভাইবোন, পূর্বপুরুষ, এবং উত্তরপুরূষ আছে. 78 00:04:59,730 --> 00:05:05,650 তারা চমত্কার সাধারণ জ্ঞান, তারা কী বলতে চাইছেন. 79 00:05:05,650 --> 00:05:09,610 যদি আমরা জিজ্ঞাসা - এটি এর বাবা. 80 00:05:09,610 --> 00:05:12,830 তাহলে 3 পিতা বা মাতা? 81 00:05:12,830 --> 00:05:16,090 [ছাত্রদের] 7. >> হ্যাঁ. পিতা বা মাতা ঠিক না আপনি কি পয়েন্ট হতে যাচ্ছে. 82 00:05:16,090 --> 00:05:20,510 তারপর 7 কি বাচ্চাদের? 83 00:05:20,510 --> 00:05:23,860 [ছাত্রদের] 3 এবং 9. >> হ্যাঁ. 84 00:05:23,860 --> 00:05:26,460 যে আক্ষরিক অর্থ "শিশু" অর্থ শিশুদের লক্ষ্য করুন, 85 00:05:26,460 --> 00:05:31,010 তাই 6, প্রযোজ্য কারণ এটি একটি নাতি মত না. 86 00:05:31,010 --> 00:05:35,540 কিন্তু যদি আমরা উত্তরপুরূষ যান, তাই কি হয় 7 উত্তরপুরুষ? 87 00:05:35,540 --> 00:05:37,500 [ছাত্রদের] 3, 6 ও 9. >> হ্যাঁ. 88 00:05:37,500 --> 00:05:42,330 রুট নোড উত্তরপুরুষ যাও গাছ সবকিছুই হবে, 89 00:05:42,330 --> 00:05:47,950 ছাড়া হয়তো রুট নোড নিজেই, যদি আপনি যে একটি বংশধর বিবেচনা করতে না চান. 90 00:05:47,950 --> 00:05:50,750 এবং পরিশেষে, পূর্বপুরুষ, তাই এটা বিপরীত দিক. 91 00:05:50,750 --> 00:05:55,740 তাই কি হয় 6 পূর্বপুরুষ? 92 00:05:55,740 --> 00:05:58,920 [ছাত্রদের] 3 ও 7. >> হ্যাঁ. 9 অন্তর্ভুক্ত করা হয় না. 93 00:05:58,920 --> 00:06:02,520 এটি সরাসরি রুট ফিরে যাও বংশাবলী 94 00:06:02,520 --> 00:06:13,230 আপনার পূর্বপুরুষ হবে. 95 00:06:13,230 --> 00:06:16,300 >> "আমরা যে বাইনারি গাছ গাছ যদি প্রতিটি নোডের জন্য হয় 'আদেশ', 96 00:06:16,300 --> 00:06:19,530 বাম তার সেই বংশধরেরা সকল ক্ষুদ্রতর মান আছে 97 00:06:19,530 --> 00:06:22,890 এবং ডান দিকে বেশী বেশী সমস্ত মান আছে. 98 00:06:22,890 --> 00:06:27,060 উদাহরণস্বরূপ, উপরোক্ত আদেশ গাছ কিন্তু এটা কেবল সম্ভব আদেশ বিন্যাস করা হয়. " 99 00:06:27,060 --> 00:06:30,180 আগে যে আমরা পেতে, 100 00:06:30,180 --> 00:06:36,420 একটি নিদিষ্ট বাইনারি ট্রি একটি বাইনারি অনুসন্ধান বৃক্ষ হিসাবে নামেও পরিচিত. 101 00:06:36,420 --> 00:06:38,660 এখানে আমরা করা কলিং একটি আদেশ বাইনারি গাছ এটি ঘটতে, 102 00:06:38,660 --> 00:06:41,850 কিন্তু আমি শুনতে না বলা একটি আদেশ বাইনারি ট্রি আগে, 103 00:06:41,850 --> 00:06:46,650 এবং আমরা একটি ব্যঙ্গ হয় আরো অনেক যাও বাইনারি অনুসন্ধান বৃক্ষ করা সম্ভবত. 104 00:06:46,650 --> 00:06:49,250 ঐগুলি এক এবং একই, 105 00:06:49,250 --> 00:06:54,580 এবং এটি খুবই গুরুত্বপূর্ণ যে আপনি বাইনারি গাছ এবং বাইনারি অনুসন্ধান বৃক্ষ মধ্যে পার্থক্য স্বীকার করে. 106 00:06:54,580 --> 00:06:58,830 একটি বাইনারি গাছ শুধুমাত্র ট্রি যে পয়েন্ট দুটি জিনিষ. 107 00:06:58,830 --> 00:07:02,120 প্রতিটি নোডের দুটি জিনিস স্থানটিকে. 108 00:07:02,120 --> 00:07:06,310 মান যে স্থানটিকে যাও সম্পর্কে কোন যুক্তি নেই. 109 00:07:06,310 --> 00:07:11,370 সুতরাং এখানে বেশী পছন্দ করেন, যেহেতু এটা একটি বাইনারি অনুসন্ধান বৃক্ষ, 110 00:07:11,370 --> 00:07:14,030 আমরা জানি যে 7 যদি আমরা যেতে বাকি, 111 00:07:14,030 --> 00:07:16,670 তারপর মান সম্ভবত আমরা পৌঁছতে পারে সব 112 00:07:16,670 --> 00:07:19,310 চালু 7 বাকি দ্বারা যাও 7 চেয়ে কম আছে. 113 00:07:19,310 --> 00:07:24,070 উল্লেখ্য, যে সমস্ত কম 7 তুলনায় মান 3 ও 6. 114 00:07:24,070 --> 00:07:26,040 যারা 7 বাঁদিকে সব হয়. 115 00:07:26,040 --> 00:07:29,020 যদি আমরা 7 ডান দিকে যান, সবকিছু যাও 7 তুলনায় আছে, 116 00:07:29,020 --> 00:07:33,220 তাই 9 7 ডান, সুতরাং আমরা ভাল. 117 00:07:33,220 --> 00:07:36,150 এই ট্রি একটি বাইনারি জন্য ঘটনা না, 118 00:07:36,150 --> 00:07:40,020 একটি নিয়মিত বাইনারি গাছ জন্য আমরা শুধুমাত্র বাম উপরে, 7 ২ 3 থাকতে পারে, 119 00:07:40,020 --> 00:07:47,630 9 7 বাঁদিকে; মান সবটা কোনো ক্রম নেই. 120 00:07:47,630 --> 00:07:56,140 এখন, আমরা আসলে এই না কারণ এটা ক্লান্তিকর এবং অপ্রয়োজনীয় হবে, 121 00:07:56,140 --> 00:07:59,400 কিন্তু "যাও হিসাবে অনেক আদেশ গাছ হিসাবে আপনি মনে করতে পারেন আঁকার চেষ্টা 122 00:07:59,400 --> 00:08:01,900 সংখ্যা 7, 3, 9 ব্যবহার করে, এবং 6. 123 00:08:01,900 --> 00:08:06,800 কতগুলি স্বতন্ত্র ব্যবস্থা আছে? প্রতিটি এক উচ্চতা কি? " 124 00:08:06,800 --> 00:08:10,480 >> আমরা একটি দম্পতি না, কিন্তু মূল ধারণা হয় করব, 125 00:08:10,480 --> 00:08:16,530 এই উপায় একটি বাইনারি গাছ এই মান ধারণকারী অনন্য উপস্থাপনা হয়. 126 00:08:16,530 --> 00:08:22,760 সমস্ত আমরা প্রয়োজন হয় বাইনারি কিছু গাছ রয়েছে যে 7, 3, 6, এবং 9. 127 00:08:22,760 --> 00:08:25,960 অন্য সম্ভাব্য বৈধ এক রুট 3 হবে, 128 00:08:25,960 --> 00:08:30,260 বাম যান এবং এটা 6, বাম যান এবং এটা 7, 129 00:08:30,260 --> 00:08:32,730 বাম যান এবং এটি 9. 130 00:08:32,730 --> 00:08:36,169 যে একটি পুরোপুরি বৈধ বাইনারি অনুসন্ধান বৃক্ষ. 131 00:08:36,169 --> 00:08:39,570 এটা, কারণ এটি শুধুমাত্র একটি লিঙ্ক তালিকা ভালো খুব সহায়ক নয় 132 00:08:39,570 --> 00:08:43,750 এবং এই পয়েন্টার সব ঠিক আছে নাল. 133 00:08:43,750 --> 00:08:48,900 কিন্তু এটা একটা বৈধ গাছ. হাঁ? 134 00:08:48,900 --> 00:08:51,310 [ছাত্র] মান অধিকার বৃহত্তর করা আছে কি না? 135 00:08:51,310 --> 00:08:56,700 অথবা এই -? >> এই অন্যান্য উপায় যেতে আমি বোঝানো. 136 00:08:56,700 --> 00:09:00,960 এর রয়েছে - হাঁ, যে যাক এর সুইচ. 137 00:09:00,960 --> 00:09:07,770 9, 7, 6, 3. গুড ধরা. 138 00:09:07,770 --> 00:09:11,730 এটা এখনও কি বাইনারি বৃক্ষ অনুসন্ধান করার অনুমিত হয় শুনা হয়েছে. 139 00:09:11,730 --> 00:09:15,650 সুতরাং বাম পাশাপাশি কোনো নোডের চেয়ে কম হয়েছে. 140 00:09:15,650 --> 00:09:23,180 আমরা কেবল সরাতে, বলে এই 6 পারে, এবং এটা এখানে রাখুন. 141 00:09:23,180 --> 00:09:26,880 না, আমরা নারা. কেন আমি কি যে করছে রাখা? 142 00:09:26,880 --> 00:09:35,350 এর করুক না - এখানে 6, এখানে 7, 3 থেকে 6 পয়েন্ট. 143 00:09:35,350 --> 00:09:39,290 এটি একটি বৈধ বাইনারি অনুসন্ধান বৃক্ষ. 144 00:09:39,290 --> 00:09:49,260 কী ভুল আমি যদি - এর যদি আমি একটি বিন্যাস সঙ্গে আসা আপ করতে পারেন দেখুন. 145 00:09:49,260 --> 00:09:52,280 হাঁ, ঠিক আছে. তাই এই গাছ দিয়ে ভুল? 146 00:09:52,280 --> 00:10:08,920 আর আমি মনে ইতিমধ্যে দেওয়া একটি ইঙ্গিতটি যে কিছু ভুল আছে এটা দিয়ে আপনি. 147 00:10:08,920 --> 00:10:14,430 কেন আমি কি যে করছে রাখা? 148 00:10:14,430 --> 00:10:18,510 ঠিক আছে. এই দেখায় যুক্তিসঙ্গত. 149 00:10:18,510 --> 00:10:22,590 আমরা যদি প্রতিটি নোডের, ভালো 7, তারপর 7 বাঁদিকে চেহারা একটি 3. 150 00:10:22,590 --> 00:10:24,960 সুতরাং আমরা 3 আছে, 3 ডান বিষয় একটি 6. 151 00:10:24,960 --> 00:10:27,750 এবং যদি আপনি 6 তাকান, 6 ডানদিকে একটি জিনিস 9. 152 00:10:27,750 --> 00:10:30,910 কারণ একটি বৈধ বাইনারি অনুসন্ধান বৃক্ষ এই না? 153 00:10:30,910 --> 00:10:36,330 [ছাত্রদের] 9 7 বাঁদিকে এখনও. >> হ্যাঁ. 154 00:10:36,330 --> 00:10:43,710 এটা সত্য যে সব মান আপনি সম্ভবত যাচ্ছে 7 বাঁদিকে দ্বারা সংযোগ করতে সক্ষম হয় 7 চেয়ে কম হওয়া আবশ্যক. 155 00:10:43,710 --> 00:10:49,120 যদি আমরা যেতে বাকি 7, 3 এবং আমরা পেতে আমরা এখনও 6 পেতে পারেন, 156 00:10:49,120 --> 00:10:52,520 আমরা এখনও 9 পেতে পারেন, কিন্তু দ্বারা থাকার কম 7 চলে গেছে, 157 00:10:52,520 --> 00:10:55,070 আমরা একটি নম্বর 7 এর চেয়ে অনেক বেশী পেতে সক্ষম হবে না. 158 00:10:55,070 --> 00:10:59,830 সুতরাং এটি বৈধ বাইনারি অনুসন্ধান বৃক্ষ নয়. 159 00:10:59,830 --> 00:11:02,330 >> আমার ভাই আসলে একটি সাক্ষাত্কারে প্রশ্ন ছিল 160 00:11:02,330 --> 00:11:07,760 যা ছিল মূলত কিছু যাচাই আপ এই মাত্র, কোড 161 00:11:07,760 --> 00:11:10,500 কিনা একটি গাছ একটি বাইনারি অনুসন্ধান বৃক্ষ, 162 00:11:10,500 --> 00:11:13,580 এবং তাই সর্বপ্রথম যে জিনিসটি সে কি ছিল শুধু দেখুন 163 00:11:13,580 --> 00:11:17,020 যদি বাম এবং ডান সঠিক হয়, এবং তারপর নিচে আছে বারবার. 164 00:11:17,020 --> 00:11:19,700 কিন্তু আপনি ঠিক না যে কি করতে পারেন; আপনি ট্র্যাক রাখা আছে 165 00:11:19,700 --> 00:11:22,550 আসলে যে এখন যে আমি 7 বামে চলে গেছে করেছি, 166 00:11:22,550 --> 00:11:26,340 এই subtree সবকিছুই 7 চেয়ে কম হওয়া আবশ্যক. 167 00:11:26,340 --> 00:11:28,430 সঠিক অ্যালগরিদম ট্র্যাক রাখা প্রয়োজন 168 00:11:28,430 --> 00:11:35,970 সীমার মধ্যে যে সম্ভবত মান হত্তয়া ইন করতে পারেন 169 00:11:35,970 --> 00:11:38,360 আমরা তাদের সব দিয়ে যেতে হবে না. 170 00:11:38,360 --> 00:11:41,630 একটা চমৎকার পুনরাবৃত্তি সম্পর্ক আছে, 171 00:11:41,630 --> 00:11:44,810 যদিও আমরা যারা, আছে বা অর্জিত না আমরা যারা পেতে হবে না, 172 00:11:44,810 --> 00:11:47,030 সংজ্ঞা আসলে কতগুলি আছে. 173 00:11:47,030 --> 00:11:53,180 সুতরাং তাদের মধ্যে 14 আছে. 174 00:11:53,180 --> 00:11:56,020 কিভাবে আপনি এটি কি ধারণা গাণিতিকভাবে মত, 175 00:11:56,020 --> 00:11:59,770 আপনি রুট নোড হতে কোনো একক এক বাছাই করতে পারেন, 176 00:11:59,770 --> 00:12:03,160 এবং তারপরে আমি যদি রুট নোড হতে 7 বাছাই, 177 00:12:03,160 --> 00:12:08,150 তারপর, বলা আছে কিছু সংখ্যা যে আমার বাম নোড করা যেতে পারে, 178 00:12:08,150 --> 00:12:10,440 এবং কিছু সংখ্যা যে আমার ডান নোড হতে পারি, 179 00:12:10,440 --> 00:12:15,090 কিন্তু যদি আমি মোট সংখ্যা তারপর, যে পরিমাণ বাম যেতে পারেন n আছে 180 00:12:15,090 --> 00:12:18,820 1 - প্লাস পরিমাণ যে অধিকার যেতে পারেন n হল. 181 00:12:18,820 --> 00:12:26,130 তাই অবশিষ্ট সংখ্যার, তারা হয় বাম বা ডান যেতে সক্ষম করা আছে. 182 00:12:26,130 --> 00:12:31,580 মনে হচ্ছে কঠিন যে, যদি আমি 3 করান তারপর প্রথম সবকিছু বাম যেতে হয়েছে, 183 00:12:31,580 --> 00:12:35,080 কিন্তু যদি আমি 7 করা, তারপরে কিছু জিনিস বাম যান এবং কিছু জিনিস অধিকার সরাসরি যেতে পারেন. 184 00:12:35,080 --> 00:12:39,570 এবং আমি প্রথম '3 'দ্বারা বোঝানো ডান সবকিছু যেতে পারেন. 185 00:12:39,570 --> 00:12:42,350 এটি সত্যিই, আপনি এটা সম্পর্কে হিসাবে মনে আছে, 186 00:12:42,350 --> 00:12:47,980 কিভাবে অনেক কিছু গাছ পরবর্তী স্তরে যেতে পারেন. 187 00:12:47,980 --> 00:12:50,420 এবং তা আসে আউট হতে 14; অথবা আপনি তাদের সব আহরণ করতে পারে, 188 00:12:50,420 --> 00:12:54,650 এবং তারপর আপনি 14 পাবেন. 189 00:12:54,650 --> 00:13:01,120 >> এখানে ফিরে যাওয়া, 190 00:13:01,120 --> 00:13:03,510 "ক্রমাঙ্কিত বাইনারি বৃক্ষ হল শীতল কারণ আমরা তাদের মাধ্যমে সন্ধান করতে পারেন 191 00:13:03,510 --> 00:13:06,910 একটি সাজানো অ্যারের মধ্যে অনুসন্ধানের অনুরূপ উপায়. 192 00:13:06,910 --> 00:13:10,120 এটা করার জন্য, root-এ এবং আমরা শুরু গাছ নিচে আমাদের উপায় কাজ 193 00:13:10,120 --> 00:13:13,440 প্রতি পাতার, মান আমরা অনুসন্ধান করছেন বিরুদ্ধে প্রতিটি নোডের এর মান যাচাই করছি. 194 00:13:13,440 --> 00:13:15,810 যদি বর্তমান নোড এর মান মান কম আমরা খুঁজছেন, 195 00:13:15,810 --> 00:13:18,050 আপনি যেতে পরবর্তী নোডের এর ডান সন্তান. 196 00:13:18,050 --> 00:13:20,030 অন্যথা, আপনি নোড এর বাম সন্তানের যান. 197 00:13:20,030 --> 00:13:22,800 এক পর্যায়ে, আপনি হয় মান আপনি যা খুঁজছেন তা খুঁজে পাবেন, অথবা আপনি পাবেন একটি নাল মধ্যে চালানো হবে, 198 00:13:22,800 --> 00:13:28,520 মান ইঙ্গিত ট্রির. না " 199 00:13:28,520 --> 00:13:32,450 আমি গাছ আমরা আগে পুনরায় আঁকুন আছে; যে একটি দ্বিতীয় নেব. 200 00:13:32,450 --> 00:13:38,280 কিন্তু আমরা দর্শনার্থ কিনা 6, 10, এবং 1 টি গাছ আছে চাই. 201 00:13:38,280 --> 00:13:49,180 তাই এটি ছিল, 7, 9, 3, 6. ঠিক আছে. 202 00:13:49,180 --> 00:13:52,730 আপনি যে সংখ্যাগুলি পর্যন্ত দেখতে চাই, আমরা 6 সন্ধান করতে চান. 203 00:13:52,730 --> 00:13:55,440 কীভাবে এই অ্যালগরিদম কাজ করে? 204 00:13:55,440 --> 00:14:03,040 ভাল, আমরা আমাদের কিছু গাছ root-র পয়েন্টার আছে. 205 00:14:03,040 --> 00:14:12,460 এবং আমরা ব্যবহার করে root এবং বলে যান হবে, এই মান সমান মূল্য আমরা অনুসন্ধান করছি? 206 00:14:12,460 --> 00:14:15,000 সুতরাং আমরা 6 জন্য, সেইজন্য এটা সমান না করছি. 207 00:14:15,000 --> 00:14:20,140 সুতরাং আমরা রাখা যাচ্ছে, এবং এখন আমরা বলতে, ঠিক আছে, তাই 6 7 কম. 208 00:14:20,140 --> 00:14:23,940 এর অর্থ কি আমরা বাম যেতে চান, অথবা না এ মুহূর্তে আমরা যেতে চান? 209 00:14:23,940 --> 00:14:27,340 [ছাত্র] বাম. >> হ্যাঁ. 210 00:14:27,340 --> 00:14:33,340 এটা উল্লেখযোগ্য ভাবে সহজ, আপনি সব কি এক গাছ সম্ভাব্য নোড আঁকা হয় 211 00:14:33,340 --> 00:14:37,760 এবং তারপর আপনি don't - পরিবর্তে আপনার মাথায় চিন্তা করার চেষ্টা করছে, 212 00:14:37,760 --> 00:14:40,020 ঠিক আছে, যদি এটা কম, বাম যাও আমি যান বা ডানে যান, 213 00:14:40,020 --> 00:14:43,030 এই ছবি শুধু এ খুঁজছেন, খুব স্পষ্ট যে আমি বাম যেতে 214 00:14:43,030 --> 00:14:47,700 যদি এই নোডের মান হল যে আমি চাই তার চেয়ে অনেক বেশী. 215 00:14:47,700 --> 00:14:52,600 সুতরাং বাম আপনাকে, এখন আমি এ যান 3. 216 00:14:52,600 --> 00:14:57,770 আমি চাই যাও - 3 হয় মান আমি খুঁজছি, যা 6 থেকে অনেক কম. 217 00:14:57,770 --> 00:15:03,420 সুতরাং অধিকার আমরা যান এবং এখন আমি 6 আপ শেষ, 218 00:15:03,420 --> 00:15:07,380 যা মান জন্য আমি, সেইজন্য আমি ফিরে সত্য করছি. 219 00:15:07,380 --> 00:15:15,760 পরের মান জন্য আমি সন্ধান যাচ্ছি 10. 220 00:15:15,760 --> 00:15:23,230 ঠিক আছে. কেটে যে - - ব্যবহার করে root অনুসরণ যাচ্ছে 10 সুতরাং এখন,, যাচ্ছে. 221 00:15:23,230 --> 00:15:27,670 এখন, 10 থেকে 7 তার চেয়ে অনেক বেশী হবে, তাই না আমি ডান দিকে তাকান করতে চান. 222 00:15:27,670 --> 00:15:31,660 আমি ধরে এখানে আসা যাচ্ছে না, 10 থেকে 9 চেয়ে বেশী হবে, 223 00:15:31,660 --> 00:15:34,520 আমি ডান দিকে তাকান চান যাচ্ছি. 224 00:15:34,520 --> 00:15:42,100 আমি এখানে আসা উপর, কিন্তু এখানে উপর এখন আমি নাল এ আছি. 225 00:15:42,100 --> 00:15:44,170 কি আমি যদি আমি নাল আঘাত করবেন? 226 00:15:44,170 --> 00:15:47,440 [ছাত্র] মিথ্যা ফিরুন? >> হ্যাঁ. 10 আমি খুঁজে পাইনি. 227 00:15:47,440 --> 00:15:49,800 1 একটি প্রায় একই কেস হতে চলেছে, 228 00:15:49,800 --> 00:15:51,950 ছাড়া এটা করা যাচ্ছে ফ্লিপ যাও; পরিবর্তে খুঁজছেন 229 00:15:51,950 --> 00:15:56,540 ডান দিকে নিচে, আমি বাম দিকে তাকান নিচে যাচ্ছি. 230 00:15:56,540 --> 00:16:00,430 >> এখন আমি মনে করি আমরা আসলে কোড পাওয়ার জন্য. 231 00:16:00,430 --> 00:16:04,070 এখানে যেখানে - CS50 যন্ত্র খুলুন এবং আপনার উপায় আছে নেভিগেট, 232 00:16:04,070 --> 00:16:07,010 কিন্তু আপনার স্থান ঠিক করতে পারেন না. 233 00:16:07,010 --> 00:16:09,170 এটা সম্ভবত এর জায়গায় এটা আদর্শ, 234 00:16:09,170 --> 00:16:13,760 কারণ আমরা স্থান মধ্যে কাজ করতে পারে. 235 00:16:13,760 --> 00:16:19,170 "প্রথমে আমরা একটি নতুন বাইনারি গাছ নোড int মান ধারণকারী জন্য টাইপ সংজ্ঞা প্রয়োজন হবে. 236 00:16:19,170 --> 00:16:21,400 Boilerplate typedef নীচের ব্যবহার করে, 237 00:16:21,400 --> 00:16:24,510 একটি নতুন বাইনারি ট্রি একটি নোডের জন্য টাইপ সংজ্ঞা তৈরি. 238 00:16:24,510 --> 00:16:27,930 আপনি যদি আটকে যান. . . "বাজে কথা, বাজে কথা, বাজে কথা. ঠিক আছে. 239 00:16:27,930 --> 00:16:30,380 সুতরাং এর এখানে boilerplate করা যাক, 240 00:16:30,380 --> 00:16:41,630 typedef struct নোড, এবং নোড. হাঁ, ঠিক আছে. 241 00:16:41,630 --> 00:16:44,270 তাই কি আমরা আমাদের ক্ষেত্র নোডের মধ্যে চান যাচ্ছেন? 242 00:16:44,270 --> 00:16:46,520 [ছাত্র] আন্তর্জাতিক এবং তারপর দুই পয়েন্টার? 243 00:16:46,520 --> 00:16:49,700 >> আন্তর্জাতিক মান, দুই পয়েন্টার? আমি কিভাবে পয়েন্টার লিখুন? 244 00:16:49,700 --> 00:16:58,440 [ছাত্র] struct. >> আমি ইন হ্যাঁ, তাই struct নোড * বামে জুম করা উচিত, 245 00:16:58,440 --> 00:17:01,320 এবং struct নোড * অধিকার. 246 00:17:01,320 --> 00:17:03,460 এবং শেষ সময় থেকে আলোচনা মনে রাখবেন, 247 00:17:03,460 --> 00:17:15,290 এই যে কোন অর্থে তোলে, এই অর্থে কোন তোলে, 248 00:17:15,290 --> 00:17:18,270 এই অর্থে কোন তোলে. 249 00:17:18,270 --> 00:17:25,000 আপনি যা কিছু আছে প্রয়োজন এই recursive struct সংজ্ঞায়িত. 250 00:17:25,000 --> 00:17:27,970 ঠিক আছে, যাতে এর কি আমাদের গাছ অনুরূপ যাচ্ছে. 251 00:17:27,970 --> 00:17:37,670 যদি আমরা একটি trinary গাছ কি তারপর, একটি নোড B1, b2, b3 struct নোড * মত চেহারা হতে পারে, 252 00:17:37,670 --> 00:17:43,470 যেখানে b হল একটি শাখা - প্রকৃতপক্ষে, আমি আরো শোনা করেছি এটা মধ্যম বাম, ডান, কিন্তু যাই হোক না কেন,. 253 00:17:43,470 --> 00:17:55,610 আমরা শুধুমাত্র বাইনারি যত্নশীল, তাই ডান, বাম. 254 00:17:55,610 --> 00:17:59,110 "এখনই গাছ মূল নোডের জন্য একটি বিশ্বব্যাপী * পরিবর্তনশীল. ডিক্লেয়ার" 255 00:17:59,110 --> 00:18:01,510 তাই আমরা তা করতে যাচ্ছেন না. 256 00:18:01,510 --> 00:18:08,950 যাতে সামান্য জিনিস আরো কঠিন এবং আরো সাধারণ করতে, 257 00:18:08,950 --> 00:18:11,570 আমরা একটি বিশ্বব্যাপী নোড পরিবর্তনশীল থাকবে না. 258 00:18:11,570 --> 00:18:16,710 প্রধান পরিবর্তে, আমরা আমাদের সমস্ত নোড জিনিষ ঘোষণা করা হবে, 259 00:18:16,710 --> 00:18:20,500 এবং তার মানে তাদের নীচে, যখন আমরা শুরু চলমান 260 00:18:20,500 --> 00:18:23,130 আমাদের রয়েছে ফাংশন এবং আমাদের সন্নিবেশ ফাংশন, 261 00:18:23,130 --> 00:18:27,410 পরিবর্তে আমাদের রয়েছে মাত্র ফাংশন বিশ্বব্যাপী এই নোডের ভেরিয়েবল ব্যবহার করে, 262 00:18:27,410 --> 00:18:34,280 আমরা একটি আর্গুমেন্ট হিসাবে এটি গাছ নিতে যাচ্ছে যে আমরা এটিকে প্রক্রিয়া যাও চান সেটি. 263 00:18:34,280 --> 00:18:36,650 বিশ্বব্যাপী পরিবর্তনশীল রয়ে জিনিষ সহজ করতে অনুমিত ছিল. 264 00:18:36,650 --> 00:18:42,310 আমরা কঠিন জিনিষ করতে যাচ্ছেন. 265 00:18:42,310 --> 00:18:51,210 এখন একটি মিনিট জিনিস থেকে এই সাজানোর ঠিক নিতে, 266 00:18:51,210 --> 00:18:57,690 যেখানে ভিতর প্রধান আপনি এই ট্রি তৈরি করতে চান, এবং যে সমস্ত আপনি কাজ করতে চান. 267 00:18:57,690 --> 00:19:04,530 এবং চেষ্টা করুন আপনার প্রধান ফাংশনে এই ট্রি নির্মাণ করা. 268 00:19:42,760 --> 00:19:47,610 >> ঠিক আছে. সুতরাং আপনি আছে নির্মিত সম্পূর্ণ উপায় গাছ এখনো আছে না. 269 00:19:47,610 --> 00:19:49,840 কিন্তু কেউ কিছু আমি থামা পারে আছে 270 00:19:49,840 --> 00:20:03,130 কিভাবে এই ধরনের একটি ট্রি নির্মাণের শুরু দেখাতে পারে? 271 00:20:03,130 --> 00:20:08,080 [ছাত্র] কেউ এর banging, যাও আউট চেষ্টা করছিলেন. 272 00:20:08,080 --> 00:20:13,100 [Bowden] যে কেউ তাদের ট্রি নির্মাণ করতে স্বাচ্ছন্দ্য? 273 00:20:13,100 --> 00:20:15,520 [ছাত্র] শিওর. এটা কাজ না. >> এটা সূক্ষ্ম. আমরা শুধু শেষ করতে পারেন - 274 00:20:15,520 --> 00:20:26,860 উহু, এটি আপনি সংরক্ষণ করতে পারবেন? কি আনন্দ. 275 00:20:26,860 --> 00:20:32,020 তাই আমরা এখানে আছে - উহু, সামান্য আমি বন্ধ করছি কাটা. 276 00:20:32,020 --> 00:20:34,770 আমি এ জুম হয়েছে? 277 00:20:34,770 --> 00:20:37,730 জুম ইন, আউট স্ক্রল. >> আমি একটা প্রশ্ন আছে. >> হ্যাঁ? 278 00:20:37,730 --> 00:20:44,410 [ছাত্র] আপনি যখন struct সংজ্ঞায়িত হয় সক্রিয়া করা কিছু ভালো জিনিস? 279 00:20:44,410 --> 00:20:47,160 [Bowden] নং >> ঠিক আছে. সুতরাং আপনি আরম্ভ করা হবে - 280 00:20:47,160 --> 00:20:50,450 [Bowden] নং যখন আপনি, অথবা একটি সংজ্ঞায়িত struct যখন আপনি ঘোষণা, 281 00:20:50,450 --> 00:20:55,600 এটা যদি আপনি এর কোন int ডিক্লেয়ার চান; এটি ডিফল্টরূপে সক্রিয়া করা হয় না. 282 00:20:55,600 --> 00:20:59,020 এটা ঠিক একই জিনিস. এটি তার ব্যক্তিগত ক্ষেত্র প্রতিটি মত 283 00:20:59,020 --> 00:21:04,460 এটি একটি মধ্যে আবর্জনা মান থাকতে পারে. >> এবং এটা সম্ভব সংজ্ঞায়িত - অথবা একটি struct ডিক্লেয়ার 284 00:21:04,460 --> 00:21:07,740 একটি উপায় আছে যে এটা তাদের আরম্ভ? 285 00:21:07,740 --> 00:21:13,200 [Bowden] হ্যাঁ. সুতরাং, শর্টকাট প্রারম্ভিক বাক্য গঠন 286 00:21:13,200 --> 00:21:18,660 অনুরূপ যাচ্ছে - 287 00:21:18,660 --> 00:21:22,200 দুটি উপায়ে আমরা এই কাজ করতে পারেন. আমি মনে করি আমরা এটা কম্পাইল করা উচিত 288 00:21:22,200 --> 00:21:25,840 নিশ্চিত ঝনঝন করা এছাড়াও এই আছে. 289 00:21:25,840 --> 00:21:28,510 আর্গুমেন্ট ক্রম struct মধ্যে যে আসে, 290 00:21:28,510 --> 00:21:32,170 আপনি এই তরঙ্গায়িত ধনুর্বন্ধনী ভিতরে আর্গুমেন্ট হিসাবে আদেশ দেন. 291 00:21:32,170 --> 00:21:35,690 তাই আপনি যদি যাও যাও 9 এটি আরম্ভ করতে চান এবং বাকি তারপর ডান নাল করা এবং অকার্যকর করা, 292 00:21:35,690 --> 00:21:41,570 এটি 9, হতে নাল, নাল হবে. 293 00:21:41,570 --> 00:21:47,890 বিকল্প হয়, এবং সম্পাদক এই বাক্য গঠন না পছন্দ করি না, 294 00:21:47,890 --> 00:21:50,300 এবং এটা মনে করে আমি একটি নতুন ব্লক করতে চান, 295 00:21:50,300 --> 00:22:01,800 কিন্তু বিকল্প কিছু ভালো - 296 00:22:01,800 --> 00:22:04,190 এখানে, আমি একটি নতুন লাইন থেকে তা রেখে দেব. 297 00:22:04,190 --> 00:22:09,140 আপনি স্পষ্টভাবে বলতে পারে, আমি সঠিক বাক্য গঠন ভুলবেন না. 298 00:22:09,140 --> 00:22:13,110 সুতরাং আপনি স্পষ্টভাবে তাদের নামের দ্বারা, ঠিকানা এবং বলতে পারেন, 299 00:22:13,110 --> 00:22:21,570 . গ, বা. মান = 9,. বাম = শূন্য. 300 00:22:21,570 --> 00:22:24,540 আমি কমা করা প্রয়োজন এই অনুমান করছি. 301 00:22:24,540 --> 00:22:29,110 . ডান = শূন্য, তাই এই ভাবে আপনি না 302 00:22:29,110 --> 00:22:33,780 আসলে struct অনুযায়ী জানা প্রয়োজন, 303 00:22:33,780 --> 00:22:36,650 এবং যখন আপনি এই পড়ি, এটা আরো অনেক কিছু স্পষ্ট 304 00:22:36,650 --> 00:22:41,920 কি আমার মান সক্রিয়া করা হচ্ছে. 305 00:22:41,920 --> 00:22:44,080 >> এই যে সব জিনিষ এক এরকম - 306 00:22:44,080 --> 00:22:49,100 অধিকাংশ অংশ জন্য, তাই, সি + + সি হল একটি সুপারসেটও 307 00:22:49,100 --> 00:22:54,160 আপনি সি কোড নিতে, এটি তার সি + +, এবং এটা কম্পাইল করা উচিত অগ্রসর না হতে পারেন. 308 00:22:54,160 --> 00:22:59,570 এই যে সি + + সমর্থন করে না এক, যাতে লোকেরা এটি না থাকে. 309 00:22:59,570 --> 00:23:01,850 আমি যদি যে একমাত্র কারণ তা না ঝোঁক জানি না, 310 00:23:01,850 --> 00:23:10,540 কিন্তু কেস যেখানে আমি এটা ব্যবহার করা প্রয়োজন সি + +, তাই না এবং আমি এই ব্যবহার করতে পারেন এর সাথে কাজ করা প্রয়োজন. 311 00:23:10,540 --> 00:23:14,000 কিছু যে আরেকটি উদাহরণ সি + + এর সাথে কাজ করে না 312 00:23:14,000 --> 00:23:16,940 কিভাবে একটি malloc "অকার্যকর *," ফেরৎ টেকনিক্যালি, 313 00:23:16,940 --> 00:23:20,200 কিন্তু আপনি ঠিক গৃহস্থালি * x = malloc যাই হোক না কেন বলতে পারে, 314 00:23:20,200 --> 00:23:22,840 এবং এটি স্বয়ংক্রিয়ভাবে একটি গৃহস্থালি * যাও নিক্ষেপ করা হবে. 315 00:23:22,840 --> 00:23:25,450 যে স্বয়ংক্রিয় অভিনেতা না ঘটতে সি + +. 316 00:23:25,450 --> 00:23:28,150 যে, কম্পাইল না এবং আপনি স্পষ্টভাবে বলতে প্রয়োজন করবে 317 00:23:28,150 --> 00:23:34,510 গৃহস্থালি *, malloc, যাই হোক না কেন, একটি গৃহস্থালি * এটি নিক্ষেপ. 318 00:23:34,510 --> 00:23:37,270 অনেক জিনিস আছে যা সি এবং সি + + উপর অসম্মতি নেই, 319 00:23:37,270 --> 00:23:40,620 কিন্তু ঐ দুটি. 320 00:23:40,620 --> 00:23:43,120 সুতরাং আমরা এই বাক্য গঠন সঙ্গে যাবেন. 321 00:23:43,120 --> 00:23:46,150 এমনকি যদি আমরা যে সিনট্যাক্স দিয়ে যান নি, 322 00:23:46,150 --> 00:23:49,470 কি - র সাথে ভুল হতে পারে? 323 00:23:49,470 --> 00:23:52,170 [ছাত্র] আমি এটা dereference করতে হবে না? >> হ্যাঁ. 324 00:23:52,170 --> 00:23:55,110 মনে রাখবেন যে তীর একটি অন্তর্নিহিত dereference আছে, 325 00:23:55,110 --> 00:23:58,230 এবং যখন আমরা শুধু একটি struct সঙ্গে লেনদেন করছেন, 326 00:23:58,230 --> 00:24:04,300 আমরা ব্যবহার করতে চান. একটি struct ক্ষেত্রের ভিতর এ পেতে. 327 00:24:04,300 --> 00:24:07,200 এবং শুধুমাত্র সময় আমরা তীর ব্যবহার হয় যখন আমরা যেতে চাই - 328 00:24:07,200 --> 00:24:13,450 ভাল, তীর সমতূল্য যাও - 329 00:24:13,450 --> 00:24:17,020 তাই এটা বোঝানো যদি আমি তীর ব্যবহৃত হবে. 330 00:24:17,020 --> 00:24:24,600 সমস্ত তীর মানে, এই dereference এখন, আমি একটি struct এ আছি, এবং আমি ক্ষেত্রের পেতে পারেন. 331 00:24:24,600 --> 00:24:28,040 হয় সরাসরি অথবা ক্ষেত্র dereference পেতে পেতে এবং ক্ষেত্র - 332 00:24:28,040 --> 00:24:30,380 আমি অনুমান এই মান হওয়া উচিত. 333 00:24:30,380 --> 00:24:33,910 কিন্তু এখানে আমি শুধু একটা struct একটি struct একটি পয়েন্টার, না মোকাবেলা করছি, 334 00:24:33,910 --> 00:24:38,780 এবং যাতে আমি তীর ব্যবহার করতে পারবেন না. 335 00:24:38,780 --> 00:24:47,510 কিন্তু এই জিনিস সাজানোর আমরা সমস্ত নোড জন্য কিছু করতে পারি. 336 00:24:47,510 --> 00:24:55,790 ওহ আমার ঈশ্বর. 337 00:24:55,790 --> 00:25:09,540 এই 6, 7, এবং 3. 338 00:25:09,540 --> 00:25:16,470 তারপর আমরা আমাদের ট্রির শাখা সেট আপ করতে পারেন, আমরা 7 থাকতে পারে না - 339 00:25:16,470 --> 00:25:21,650 আমরা, তার বাম হতে পারে 3 উচিত নির্দেশ. 340 00:25:21,650 --> 00:25:25,130 সুতরাং আমরা যে কিভাবে করব? 341 00:25:25,130 --> 00:25:29,320 [ছাত্র, অপাচ্য] >> হ্যাঁ. node3 ঠিকানা, 342 00:25:29,320 --> 00:25:34,170 এবং যদি আপনি ঠিকানা থাকে না, তাহলে এটা কম্পাইল করবে না. 343 00:25:34,170 --> 00:25:38,190 কিন্তু মনে রাখবেন যে এই পয়েন্টার পরবর্তী নোডের যাও. 344 00:25:38,190 --> 00:25:44,930 9 ডান দিকে নির্দেশ করা উচিত, 345 00:25:44,930 --> 00:25:53,330 এবং 3 6 অধিকার নির্দেশ করা উচিত. 346 00:25:53,330 --> 00:25:58,480 আমার মনে হয় সব সেট. কোন মন্তব্য বা প্রশ্ন? 347 00:25:58,480 --> 00:26:02,060 [ছাত্র, অপাচ্য] ব্যবহার করে root 7 হবে. 348 00:26:02,060 --> 00:26:08,210 আমরা শুধু নোড বলতে পারে * ptr = 349 00:26:08,210 --> 00:26:14,160 অথবা রুট, = & node7. 350 00:26:14,160 --> 00:26:20,730 >> আমাদের জন্য, আমরা সন্নিবেশ সাথে ডিল করা যাচ্ছেন, 351 00:26:20,730 --> 00:26:25,490 তাই আমরা এই বাইনারি গাছ মধ্যে সন্নিবেশ একটি ফাংশন লিখতে চান চলুন 352 00:26:25,490 --> 00:26:34,230 এবং অবশ্যম্ভাবীরূপে সন্নিবেশ যাও malloc একটি নতুন নোডের জন্য এই ট্রি নির্মাণ কল যাচ্ছে. 353 00:26:34,230 --> 00:26:36,590 তাই আমি সত্য সঙ্গে ময়লা পাওয়া যাচ্ছে যে কিছু নোড 354 00:26:36,590 --> 00:26:38,590 স্ট্যাকের উপর বর্তমানে 355 00:26:38,590 --> 00:26:43,680 এবং অন্যান্য নোড যাও হিপ শেষ যখন আমরা তাদের সন্নিবেশ করতে যাচ্ছি. 356 00:26:43,680 --> 00:26:47,640 এটি পুরোপুরি বৈধ, কিন্তু একমাত্র কারণ 357 00:26:47,640 --> 00:26:49,600 আমরা এই স্ট্যাকের করতে 358 00:26:49,600 --> 00:26:51,840 কারণ হল এটা যেমন একটি কল্পিত উদাহরণ আমরা জানি 359 00:26:51,840 --> 00:26:56,360 গাছ 7, 3, 6, 9 হিসাবে নির্মাণ করা অনুমিত হয়. 360 00:26:56,360 --> 00:27:02,970 যদি আমরা এই আছে কি না, তাহলে আমরা malloc যাও আছে প্রথম স্থানে যাবে না. 361 00:27:02,970 --> 00:27:06,160 হিসাবে আমরা একটু পরে দেখতে পাবেন যে, আমরা malloc'ing করা উচিত. 362 00:27:06,160 --> 00:27:08,570 রাইট এখন এটা পুরোপুরি যুক্তিসঙ্গত স্ট্যাকের রাখতে, 363 00:27:08,570 --> 00:27:14,750 কিন্তু যাক এর একটি malloc বাস্তবায়ন এই পরিবর্তন. 364 00:27:14,750 --> 00:27:17,160 সুতরাং এখন এই প্রতিটি কিছু ভালো হতে যাচ্ছে 365 00:27:17,160 --> 00:27:24,240 নোড * node9 = malloc (sizeof (নোড)). 366 00:27:24,240 --> 00:27:28,040 এবং এখন আমরা আমাদের চেক করতে যাচ্ছেন. 367 00:27:28,040 --> 00:27:34,010 যদি (== NULL node9) - আমি যে চাই না - 368 00:27:34,010 --> 00:27:40,950 1, ফিরে যান এবং তারপর আমরা node9> কারণ এখন যে এটা একটা পয়েন্টার করতে পারেন, 369 00:27:40,950 --> 00:27:45,300 মান = 6, node9> বাম = শূন্য, 370 00:27:45,300 --> 00:27:48,930 node9-> ডানে = শূন্য, 371 00:27:48,930 --> 00:27:51,410 এবং আমরা যারা প্রতিটি নোডের জন্য যে কি আছে চলুন. 372 00:27:51,410 --> 00:27:57,490 তাই, আমি কি এটা করা ভিতরে একটি পৃথক ফাংশন. 373 00:27:57,490 --> 00:28:00,620 চলুন শুরু করা যাক কল এটি নোড * build_node, 374 00:28:00,620 --> 00:28:09,050 এবং এই API গুলি আমরা Huffman কোডিং জন্য কিছুটা অনুরূপ. 375 00:28:09,050 --> 00:28:12,730 আমরা একটি গাছ জন্য দিতে সূচনাকারী ফাংশন আপনি 376 00:28:12,730 --> 00:28:20,520 এবং deconstructor যারা গাছ এবং বন জন্য একই জন্য "ভূমিকা". 377 00:28:20,520 --> 00:28:22,570 >> তাই আমরা এখানে একটি সূচনাকারী ফাংশন আছে চলুন 378 00:28:22,570 --> 00:28:25,170 শুধু আমাদের জন্য একটি নোড নির্মাণের. 379 00:28:25,170 --> 00:28:29,320 এবং এটা ঠিক ভালো চমত্কার চেহারা অনেক যাচ্ছে. 380 00:28:29,320 --> 00:28:32,230 এমনকি আমি অলস হতে চাই যাচ্ছে এবং পরিবর্তনশীল নাম পরিবর্তন না, 381 00:28:32,230 --> 00:28:34,380 যদিও node9 কোন মানে আর তোলে. 382 00:28:34,380 --> 00:28:38,610 ওহ, আমি অনুমান node9 এর মান হয়েছে 6 করা উচিত. 383 00:28:38,610 --> 00:28:42,800 এখন আমরা node9 ফিরে আসতে পারেন. 384 00:28:42,800 --> 00:28:49,550 এবং এখানে আমরা নাল ফেরত পাঠাবেন. 385 00:28:49,550 --> 00:28:52,690 যে বিল্ড একটি নোড ফাংশন সকলকে একমত? 386 00:28:52,690 --> 00:28:59,780 তাই এখন আমরা কল করতে পারেন যে একটি নির্দিষ্ট মান এবং নাল পয়েন্টার সঙ্গে কোনো নোড নির্মাণ. 387 00:28:59,780 --> 00:29:09,750 এখন আমরা যে পোকা বলতে পারেন, আমরা নোড * node9 = build_node (9) করতে পারেন. 388 00:29:09,750 --> 00:29:25,810 এবং কিছু জিনিস না. . . 389 00:29:25,810 --> 00:29:33,980 6, 3, 7, 6, 3, 7. 390 00:29:33,980 --> 00:29:39,330 এবং এখন আমরা একই পয়েন্টার সেট আপ করতে চান, 391 00:29:39,330 --> 00:29:42,470 এখন ছাড়া পয়েন্টার নিরিখে সবকিছু ইতিমধ্যেই 392 00:29:42,470 --> 00:29:48,480 তাই আর ঠিকানা প্রয়োজন. 393 00:29:48,480 --> 00:29:56,300 ঠিক আছে. তাই কি জিনিস আমি শেষ করে যেতে চাই? 394 00:29:56,300 --> 00:30:03,850 একটি ত্রুটি পরীক্ষা করা যে আমি কাজ করছি না আছে. 395 00:30:03,850 --> 00:30:06,800 কি রিটার্ন নোড নির্মাণের? 396 00:30:06,800 --> 00:30:11,660 [ছাত্র, অপাচ্য] >> হ্যাঁ. যদি malloc ব্যর্থ, এটি নাল ফিরে আসবেন. 397 00:30:11,660 --> 00:30:16,460 আমি আলস্যে পরিবর্তে প্রতিটি জন্য একটি শর্ত করছেন রাখা এখানে নিচে যাচ্ছি. 398 00:30:16,460 --> 00:30:22,320 যদি (node9 == NULL, বা - এমনকি সহজ, 399 00:30:22,320 --> 00:30:28,020 এই সমতূল্য node9 শুধু যদি না যাও. 400 00:30:28,020 --> 00:30:38,310 তাই যদি না node9, বা না node6, বা না node3, বা না node7, 1 ফিরে. 401 00:30:38,310 --> 00:30:42,850 হয়তো আমরা malloc ব্যর্থ হয়েছে, অথবা কিছু মুদ্রণ উচিত. 402 00:30:42,850 --> 00:30:46,680 [ছাত্র] এটা মিথ্যা হিসাবে ভাল নাল সমান? 403 00:30:46,680 --> 00:30:51,290 [Bowden] কোন শূন্য মান মিথ্যা. 404 00:30:51,290 --> 00:30:53,920 সুতরাং নাল একটি শূন্য মান. 405 00:30:53,920 --> 00:30:56,780 শূন্য একটি শূন্য মান. মিথ্যা একটি শূন্য মান. 406 00:30:56,780 --> 00:31:02,130 কোন - প্রশংসনীয় অনেক শুধুমাত্র 2 শূন্য মান নাল এবং শূন্য, 407 00:31:02,130 --> 00:31:07,900 মিথ্যা শুধুমাত্র হ্যাশ শূন্য হিসাবে সংজ্ঞায়িত. 408 00:31:07,900 --> 00:31:13,030 যে প্রযোজ্য যদি আমরা গ্লোবাল ভেরিয়েবল ডিক্লেয়ার না. 409 00:31:13,030 --> 00:31:17,890 আমরা যদি নোড * রুট আপ এখানে আছে কি, 410 00:31:17,890 --> 00:31:24,150 তারপর - গ্লোবাল ভেরিয়েবল সম্পর্কে চমৎকার একটি বিষয় সবসময় তারা একটি প্রারম্ভিক মান আছে. 411 00:31:24,150 --> 00:31:27,500 এটা সত্য কর্ম না, এখানে ভেতরে কিভাবে, 412 00:31:27,500 --> 00:31:34,870 যদি আমরা আছে, যেমন, নোড বা নোড x. 413 00:31:34,870 --> 00:31:37,380 আমরা কোন ধারণা কি x.value, x.whatever আছে, 414 00:31:37,380 --> 00:31:40,700 অথবা আমরা তাদের মুদ্রণ এবং তারা নির্বিচারে হতে পারে পারে. 415 00:31:40,700 --> 00:31:44,980 যে গ্লোবাল ভেরিয়েবল সত্য না. 416 00:31:44,980 --> 00:31:47,450 সুতরাং রুট নোড বা নোড x. 417 00:31:47,450 --> 00:31:53,410 ডিফল্টরূপে, যা এর বিশ্বব্যাপী, যদি না বর্ণিতভাবে কিছু মান সক্রিয়া করা, 418 00:31:53,410 --> 00:31:57,390 এই ক্ষেত্রে মান হিসাবে একটি শূন্য মান আছে. 419 00:31:57,390 --> 00:32:01,150 তাই এখানে, নোড * root পরিচয়ে, আমরা কিছু এটা স্পষ্টভাবে না আরম্ভ করা, 420 00:32:01,150 --> 00:32:06,350 তাই তার ডিফল্ট মান নাল, হতে হবে যা পয়েন্টার শূন্য মান. 421 00:32:06,350 --> 00:32:11,870 x এর ডিফল্ট মান যে x.value শুন্য মানে যাচ্ছে, 422 00:32:11,870 --> 00:32:14,260 x.left হয় নাল, এবং x.right নাল হয়. 423 00:32:14,260 --> 00:32:21,070 সুতরাং এটি একটি struct, struct ক্ষেত্র সব শূন্য মান হতে হবে. 424 00:32:21,070 --> 00:32:24,410 আমরা যে এখানে ব্যবহার না, যদিও প্রয়োজন. 425 00:32:24,410 --> 00:32:27,320 [ছাত্র] structs অন্য ভেরিয়েবল থেকে আলাদা, এবং অন্যান্য ভেরিয়েবেলগুলো 426 00:32:27,320 --> 00:32:31,400 আবর্জনা মান; এগুলি zeros? 427 00:32:31,400 --> 00:32:36,220 [Bowden] অন্য খুব মান. তাই x এর মধ্যে, x এর জিরো হতে হবে. 428 00:32:36,220 --> 00:32:40,070 যদি এটি বিশ্বব্যাপী এর সুযোগ রয়েছে এ, এটি একটি প্রারম্ভিক মান আছে. >> ঠিক আছে. 429 00:32:40,070 --> 00:32:48,950 [Bowden] প্রারম্ভিক মান হয় আপনি এটা বা শূন্য দিয়েছেন. 430 00:32:48,950 --> 00:32:53,260 আমি মনে করি যে এই সব যত্ন নেয়. 431 00:32:53,260 --> 00:32:58,390 >> ঠিক আছে. সুতরাং প্রশ্নের পরের অংশ জিজ্ঞেস করে, 432 00:32:58,390 --> 00:33:01,260 "এখন আমরা একটি ফাংশন বলা রয়েছে লিখতে চান 433 00:33:01,260 --> 00:33:04,930 bool একটি প্রোটোটাইপ সঙ্গে int মান রয়েছে. " 434 00:33:04,930 --> 00:33:08,340 আমরা bool int মান উপস্থিত না যাচ্ছি না. 435 00:33:08,340 --> 00:33:15,110 আমাদের প্রোটোটাইপ মতো যাচ্ছে 436 00:33:15,110 --> 00:33:22,380 bool রয়েছে int-মান (. 437 00:33:22,380 --> 00:33:24,490 এবং তারপর আমরা এটি গাছ পাস করছি যাচ্ছে 438 00:33:24,490 --> 00:33:28,870 যে এটি চেক করার যাও যদি এটি যে মান আছে দেখতে হবে. 439 00:33:28,870 --> 00:33:38,290 সুতরাং নোড * গাছ). ঠিক আছে. 440 00:33:38,290 --> 00:33:44,440 এবং তারপর আমরা ভালো কিছু সঙ্গে এটি কল করতে পারেন, 441 00:33:44,440 --> 00:33:46,090 হয়তো আমরা printf বা কিছু করতে চাইবেন. 442 00:33:46,090 --> 00:33:51,040 6, আমাদের অর্থাৎ root ধারণকারী. 443 00:33:51,040 --> 00:33:54,300 যে এক, বা সত্য ফেরত পাঠাবেন, 444 00:33:54,300 --> 00:33:59,390 যেখানে রয়েছে 5 রুট মিথ্যা ফেরত পাঠাবেন. 445 00:33:59,390 --> 00:34:02,690 তাই দ্বিতীয় এই বাস্তবায়ন নিতে. 446 00:34:02,690 --> 00:34:06,780 আপনি এটি অথবা iteratively recursively করতে পারেন. 447 00:34:06,780 --> 00:34:09,739 উপায় আমরা জিনিস আপ সেট সম্পর্কে চমৎকার ব্যাপার হল 448 00:34:09,739 --> 00:34:12,300 এটি আমাদের recursive সমাধান অনেক সহজ নিজেকে ধার দেয় 449 00:34:12,300 --> 00:34:14,719 তুলনায় বিশ্বব্যাপী-পরিবর্তনশীল উপায় কি. 450 00:34:14,719 --> 00:34:19,750 কারণ আমরা যদি ঠিক আছে int মান রয়েছে, তাহলে আমরা recursing subtrees নিচে কোন উপায় আছে. 451 00:34:19,750 --> 00:34:24,130 আমরা একটি পৃথক সাহায্যকারী ফাংশন যে recurses আমাদের জন্য subtrees ডাউন আছে থাকবে. 452 00:34:24,130 --> 00:34:29,610 কিন্তু যেহেতু আমরা পরিবর্তন করেছি এটি একটি আর্গুমেন্ট হিসাবে গাছ নিতে, 453 00:34:29,610 --> 00:34:32,760 তা সবসময় প্রথম স্থানে আছে উচিত হয়েছে, 454 00:34:32,760 --> 00:34:35,710 এখন আমরা আরো সহজে recurse করতে পারেন. 455 00:34:35,710 --> 00:34:38,960 তাই বা পৌন: পুনিক recursive, আমরা উভয় উপর যাবেন, 456 00:34:38,960 --> 00:34:46,139 কিন্তু আমরা হচ্ছে বেশ সহজ আপ যে recursive শেষ দেখতে পাবেন. 457 00:34:59,140 --> 00:35:02,480 ঠিক আছে. কেউ কি কিছু আমরা সঙ্গে কাজ করতে পারেন? 458 00:35:02,480 --> 00:35:12,000 >> [ছাত্র] আমি একটি পুনরাবৃত্ত সমাধান পেয়েছেন. >> সমস্ত অধিকার, পুনরাবৃত্ত. 459 00:35:12,000 --> 00:35:16,030 ঠিক আছে, এই ভাল দেখায়. 460 00:35:16,030 --> 00:35:18,920 সুতরাং, এটি এর মাধ্যমে আমাদের পদব্রজে ভ্রমণ করতে চান? 461 00:35:18,920 --> 00:35:25,780 [ছাত্র] শিওর. আমি গাছ প্রথম নোডের পেতে একটি temp ভেরিয়েবলটি নির্ধারণ করবেন. 462 00:35:25,780 --> 00:35:28,330 এবং তারপর আমি যখন temp আছে সমান নাল না মাধ্যমে কর্তিত, 463 00:35:28,330 --> 00:35:31,700 তাই যখন গাছ এখনও ছিল, আমি অনুমান. 464 00:35:31,700 --> 00:35:35,710 এবং যদি মান সমান মান যে temp যাও প্রতি নির্দেশ করা হয়, 465 00:35:35,710 --> 00:35:37,640 তারপর এটা যে মূল্য ফেরৎ. 466 00:35:37,640 --> 00:35:40,210 অন্যথা, এটি পরীক্ষা করে যদি এটি ডাইন বা বাম দিকে যাবে. 467 00:35:40,210 --> 00:35:43,400 আপনি যদি কখনও কোন একটি অবস্থা যেখানে আরো গাছ আছে পেতে, 468 00:35:43,400 --> 00:35:47,330 তারপর এটি ফেরৎ - লুপ করে প্রস্থান করে এবং এটি ফিরিয়ে মিথ্যা. 469 00:35:47,330 --> 00:35:52,190 [Bowden] ঠিক আছে. যাতে মনে হয় ভাল. 470 00:35:52,190 --> 00:35:58,470 কেউ কিছু আর কোনো মন্তব্য আছে? 471 00:35:58,470 --> 00:36:02,400 আমি কি শুদ্ধি মন্তব্য নেই সব. 472 00:36:02,400 --> 00:36:11,020 এক জিনিস যা আমরা করতে পারি এই লোক. 473 00:36:11,020 --> 00:36:21,660 ওহ, এটা একটা সামান্য লম্বাটে যেতে হচ্ছে. 474 00:36:21,660 --> 00:36:33,460 আমি যে স্থির করব. ঠিক আছে. 475 00:36:33,460 --> 00:36:37,150 >> প্রত্যেকেরই তিন কিভাবে কাজ করে মনে রাখা উচিত. 476 00:36:37,150 --> 00:36:38,610 আছে স্পষ্টভাবে পর্যন্ত অতীতে ক্যুইজ হয়েছে 477 00:36:38,610 --> 00:36:41,170 আপনি যে একটি তিন অপারেটর সঙ্গে একটি ফাংশন দিতে, 478 00:36:41,170 --> 00:36:45,750 এবং, বলে এই অনুবাদ, যা তিন ব্যবহার করে না. 479 00:36:45,750 --> 00:36:49,140 সুতরাং এটি একটি খুব সাধারণ ক্ষেত্রে যখন আমি তিন ব্যবহার মনে, 480 00:36:49,140 --> 00:36:54,610 যেখানে যদি কিছু কিছু শর্ত একটি ভেরিয়েবল সেট, 481 00:36:54,610 --> 00:36:58,580 অন্য কিছু অন্য যে একই ভেরিয়েবলটি নির্ধারণ করবেন. 482 00:36:58,580 --> 00:37:03,390 এটা কিছু যে খুব ঘন ঘন আর এই সাজানোর ভাগ করা যায় রুপান্তরিত 483 00:37:03,390 --> 00:37:14,420 যেখানে এই যে পরিবর্তনশীল সেট - বা, ভাল, এই সত্য? তারপর এই, অন্যথায় এই. 484 00:37:14,420 --> 00:37:18,550 [ছাত্র] প্রথম এক হয় যদি সত্যি হয় তবে, ঠিক? 485 00:37:18,550 --> 00:37:25,570 [Bowden] হ্যাঁ. উপায় আমি সবসময় এটা পড়তে হয়, temp সমান মান temp চেয়ে বেশী, 486 00:37:25,570 --> 00:37:30,680 তারপর এই, অন্যথায় এই. এটি একটি প্রশ্ন এর জিজ্ঞাসা. 487 00:37:30,680 --> 00:37:35,200 এটা কি বেশী? তারপর প্রথম জিনিস করে. অন্যথায় দ্বিতীয় জিনিস করে. 488 00:37:35,200 --> 00:37:41,670 আমি প্রায় সবসময় - কোলন, আমি - আমার মাথা, আমি পড়তে হিসাবে অন্যথায়. 489 00:37:41,670 --> 00:37:47,180 >> কেউ কি একটি recursive সমাধান আছে? 490 00:37:47,180 --> 00:37:49,670 ঠিক আছে. এই এক আমরা চলুন - ইতিমধ্যে এটি হতে পারে মহান, 491 00:37:49,670 --> 00:37:53,990 কিন্তু আমরা একে আরো ভাল করতে যাচ্ছেন. 492 00:37:53,990 --> 00:37:58,720 এটি প্রায় কাছাকাছি একই সঠিক ধারণা. 493 00:37:58,720 --> 00:38:03,060 এটি শুধু ভাল,, আপনাকে ব্যাখ্যা করতে চান? 494 00:38:03,060 --> 00:38:08,340 [ছাত্র] শিওর. তাই আমরা নিশ্চিত যে প্রথম ট্রি না নাল তৈরি করছি, 495 00:38:08,340 --> 00:38:13,380 কারণ পরে যদি গাছ হয় নাল এটা মিথ্যা ফিরে কারণ আমরা তা খুঁজে পাওয়া যাচ্ছে না. 496 00:38:13,380 --> 00:38:19,200 এবং যদি এখনও সেখানে একটি বৃক্ষ, এ আমরা যান - আমরা যদি প্রথম মান বর্তমান নোড চেক. 497 00:38:19,200 --> 00:38:23,740 সত্য ফিরুন যদি এটা, এবং যদি না আমরা বাম বা ডান recurse. 498 00:38:23,740 --> 00:38:25,970 আছে যে শব্দ উপযুক্ত? >> Mm-হুম. (চুক্তি) 499 00:38:25,970 --> 00:38:33,880 সুতরাং এই যে প্রায় বিজ্ঞপ্তি - গঠনের দিক দিয়া খুব সমাধান পৌন অনুরূপ. 500 00:38:33,880 --> 00:38:38,200 এটা ঠিক যে এর পরিবর্তে recursing, আমরা যখন একটি লুপ ছিল. 501 00:38:38,200 --> 00:38:40,840 এবং এখানে বেস ক্ষেত্রে যেখানে গাছ আছে সমান নাল না 502 00:38:40,840 --> 00:38:44,850 শর্ত ছিল অধীন যা আমরা যখন লুপ এর ছড়িয়ে পড়ছিল. 503 00:38:44,850 --> 00:38:50,200 তারা খুবই অনুরূপ. কিন্তু আমরা আরও এই এক পদক্ষেপ নিতে যাচ্ছেন. 504 00:38:50,200 --> 00:38:54,190 এখন, আমরা এখানে একই জিনিস করে. 505 00:38:54,190 --> 00:38:57,680 আমরা এই লাইন দুটি একই জিনিস করছি ফিরে বিজ্ঞপ্তি, 506 00:38:57,680 --> 00:39:00,220 এক যুক্তি জন্য ছাড়া হয় বিভিন্ন. 507 00:39:00,220 --> 00:39:07,950 তাই আমরা তিন মধ্যে যে করতে যাচ্ছেন. 508 00:39:07,950 --> 00:39:13,790 আমি বিকল্প কিছু আঘাত, এবং এটি একটি প্রতীক গঠিত. ঠিক আছে. 509 00:39:13,790 --> 00:39:21,720 তাই আমরা ফিরে যাচ্ছেন যে রয়েছে. 510 00:39:21,720 --> 00:39:28,030 এই একাধিক লাইন হতে পেয়ে ভাল, না, তা হল জুম হয়েছে. 511 00:39:28,030 --> 00:39:31,060 একটি রচনাশৈলীসংক্রান্ত জিনিস হিসাবে সাধারণত,, আমি অনেক মানুষের মনে না করেন 512 00:39:31,060 --> 00:39:38,640 তীর পরে একটি স্পেস রাখতে কিন্তু আমি অনুমান যদি আপনি সংগতিপূর্ণ, এটা সূক্ষ্ম. 513 00:39:38,640 --> 00:39:44,320 যদি মান গাছ মান কম, আমরা চাই যাও গাছ বাম recurse, 514 00:39:44,320 --> 00:39:53,890 অন্যথায় আমরা গাছ ডানদিকে recurse করতে চান. 515 00:39:53,890 --> 00:39:58,610 যাতে ছিল তৈরীর এই বর্ণন ছোট, তার এক পদক্ষেপ. 516 00:39:58,610 --> 00:40:02,660 যার ফলে এই বর্ণন ছোট দুটি পর্যায় - 517 00:40:02,660 --> 00:40:09,150 আমরা এই একাধিক লাইন আলাদা করতে পারেন. 518 00:40:09,150 --> 00:40:16,500 ঠিক আছে. একে চেহারা ছোট ধাপ দুটি এখানে, 519 00:40:16,500 --> 00:40:25,860 তাই ফিরতি মূল্য গাছ মান সমান, বা যাই হোক না কেন রয়েছে. 520 00:40:25,860 --> 00:40:28,340 >> এটি একটি গুরুত্বপূর্ণ বিষয়. 521 00:40:28,340 --> 00:40:30,860 আমি যদি তিনি বলেছিলেন বর্গ মধ্যে স্পষ্টভাবে নিশ্চিত হইনি, 522 00:40:30,860 --> 00:40:34,740 কিন্তু এটি শর্ট - সার্কিট ঘটানো মূল্যায়ন বলা হচ্ছে. 523 00:40:34,740 --> 00:40:41,060 এখানে ধারণা হয় মান == গাছ মান. 524 00:40:41,060 --> 00:40:49,960 যদি এটি সত্য হয় তাহলে, এটি সত্য হয়, এবং আমরা চাই যাও 'বা' যে সঙ্গে যা কিছু থাকে এখানে বেশী. 525 00:40:49,960 --> 00:40:52,520 তাই ছাড়া এখানে উপর যা কিছু থাকে সম্পর্কে আপনারা চিন্তা, 526 00:40:52,520 --> 00:40:55,070 সম্পূর্ণ অভিব্যক্তি ফিরে যাচ্ছে কি? 527 00:40:55,070 --> 00:40:59,430 [ছাত্র] মুক্ত? >> হ্যাঁ, কারণ কিছু সত্য, 528 00:40:59,430 --> 00:41:04,990 or'd - কিছু বা সত্য or'd হয় অগত্যা সত্য. 529 00:41:04,990 --> 00:41:08,150 তাই যত তাড়াতাড়ি আমরা ফিরতি মূল্য = গাছ মান দেখুন, 530 00:41:08,150 --> 00:41:10,140 আমরা ঠিক করছি সত্য ফিরে যাচ্ছে. 531 00:41:10,140 --> 00:41:15,710 এমনকি যাচ্ছে recurse যাও নেই আরও রয়েছে লাইন ডাউন. 532 00:41:15,710 --> 00:41:20,980 আমরা এই এক ধাপ অগ্রসর হবো পারেন. 533 00:41:20,980 --> 00:41:29,490 ফিরে গাছ আছে সমান নাল এবং এই সব না. 534 00:41:29,490 --> 00:41:32,650 এটি তৈরি করা এটি একটি এক লাইন ফাংশন. 535 00:41:32,650 --> 00:41:36,790 এটি হল শর্ট - সার্কিট ঘটানো মূল্যায়ন একটি উদাহরণ. 536 00:41:36,790 --> 00:41:40,680 কিন্তু এখন এটা একই ধারণা - 537 00:41:40,680 --> 00:41:47,320 পরিবর্তে - তাই যদি গাছ নাল সমান না - বা ভাল,, 538 00:41:47,320 --> 00:41:49,580 যদি গাছ সমান নাল আছে, যা খারাপ কেস, 539 00:41:49,580 --> 00:41:54,790 যদি গাছ সমান নাল তারপর, প্রথম শর্ত মিথ্যা হতে চলেছে. 540 00:41:54,790 --> 00:42:00,550 সুতরাং মিথ্যা কিছু সঙ্গে anded কি হবে? 541 00:42:00,550 --> 00:42:04,640 [ছাত্র] মিথ্যা. >> হ্যাঁ. এটি শর্ট - সার্কিট ঘটানো মূল্যায়ন অপরার্ধ, 542 00:42:04,640 --> 00:42:10,710 যেখানে যদি গাছ না সমান নাল, তারপর না আমরা এমনকি যেতে হয় যাব না - 543 00:42:10,710 --> 00:42:14,930 অথবা যদি সমান নাল গাছ আছে, তাহলে আমরা মান == গাছ মান না যাচ্ছি না. 544 00:42:14,930 --> 00:42:17,010 আমরা ঠিক করছি অবিলম্বে মিথ্যা ফিরে যাচ্ছে. 545 00:42:17,010 --> 00:42:20,970 যা খুবই গুরুত্বপূর্ণ, যেহেতু এটি যদি শর্ট - সার্কিট ঘটানো মূল্যনির্ধারণ না, 546 00:42:20,970 --> 00:42:25,860 তারপর যদি গাছ সমান নাল আছে, এই দ্বিতীয় শর্ত seg ফল্ট যাচ্ছে, 547 00:42:25,860 --> 00:42:32,510 কারণ গাছ> মান নাল dereferencing হয়. 548 00:42:32,510 --> 00:42:40,490 সুতরাং যে যে. এই করতে পারে - একবার উপর নামান. 549 00:42:40,490 --> 00:42:44,840 এটি একটি খুব সাধারণ বিষয়, যার ফলে এই এই সঙ্গে এক লাইন না, 550 00:42:44,840 --> 00:42:49,000 কিন্তু এটা একটা শর্ত সাধারণ ব্যাপার, হয়ত ঠিক না, 551 00:42:49,000 --> 00:42:59,380 কিন্তু যদি (গাছ! = শূন্য, এবং গাছ> মান == মান), যাই হোক না কেন না. 552 00:42:59,380 --> 00:43:01,560 এটি একটি খুব সাধারণ অবস্থা, যেখানে পরিবর্তে হচ্ছে 553 00:43:01,560 --> 00:43:06,770 দুই IFS মধ্যে এই বিরতি, যেখানে চান, গাছ নাল? 554 00:43:06,770 --> 00:43:11,780 ঠিক আছে, এটা নাল না, তাই এখন গাছ মান সমান মান? এই কি. 555 00:43:11,780 --> 00:43:17,300 পরিবর্তে, এই অবস্থা, এই ফল্ট seg না করা 556 00:43:17,300 --> 00:43:21,220 কারণ এটা যদি এই ফাঁকা happens ভঙ্গ করা হবে. 557 00:43:21,220 --> 00:43:24,000 ওয়েল, আমি অনুমান যদি আপনার ট্রি একটি সম্পূর্ণ অবৈধ পয়েন্টার, এটি এখনও ফল্ট seg করতে পারেন, 558 00:43:24,000 --> 00:43:26,620 কিন্তু এটি ফল্ট seg যদি গাছ হয় নাল করতে পারবেন না. 559 00:43:26,620 --> 00:43:32,900 যদি এটা ছিল নাল, এটি আগে কখনো আপনি প্রথম স্থানে পয়েন্টার dereferenced বিরতি করবে. 560 00:43:32,900 --> 00:43:35,000 [ছাত্র] এই তথাকথিত অলস মূল্যায়ন? 561 00:43:35,000 --> 00:43:40,770 >> [Bowden] অলস মূল্যায়ন একটি পৃথক বিষয়. 562 00:43:40,770 --> 00:43:49,880 অলস মূল্যায়ন হয় আরো ভালো আপনি একটি মান জন্য অনুরোধ, 563 00:43:49,880 --> 00:43:54,270 আপনি একটি মান, ধরনের গণনা জিজ্ঞাসা, কিন্তু আপনি অবিলম্বে প্রয়োজন তা না. 564 00:43:54,270 --> 00:43:59,040 সুতরাং পর্যন্ত আসলে আপনি এটি প্রয়োজন, এটি বুদ্ধ নয়. 565 00:43:59,040 --> 00:44:03,920 এই একই জিনিস ঠিক, না কিন্তু Huffman pset, 566 00:44:03,920 --> 00:44:06,520 এটা বলছেন যে আমরা "আলস্যভরে" লিখুন. 567 00:44:06,520 --> 00:44:08,670 কারণ আমরা যে কারণ হল, আসলে আমরা লেখার করছি বাফারিং - 568 00:44:08,670 --> 00:44:11,820 আমরা এক সময়ে পৃথক বিট লিখতে না চান, 569 00:44:11,820 --> 00:44:15,450 অথবা একটি সময়ে পৃথক বাইট, আমরা বদলে যাও বাইটের একটি খণ্ড পেতে চান. 570 00:44:15,450 --> 00:44:19,270 তারপরে আমরা বাইটের একটা তাল থাকে, তখন আমরা তা লিখুন আউট করব. 571 00:44:19,270 --> 00:44:22,640 যদিও আপনি এটা লিখতে চান - এবং fwrite এবং fread জিনিস একই সাজান না. 572 00:44:22,640 --> 00:44:26,260 তারা আপনার সার্চ লিখেছেন বাফার. 573 00:44:26,260 --> 00:44:31,610 যদিও আপনি অবিলম্বে লিখুন এটা জিজ্ঞাসা, সম্ভবত এটি না করবে না. 574 00:44:31,610 --> 00:44:34,540 এবং আপনি কি নিশ্চিত যে জিনিস হবে যাচ্ছে হতে পারে না 575 00:44:34,540 --> 00:44:37,540 যতক্ষন না আপনি hfclose কল বা যাই হোক না কেন এটা, 576 00:44:37,540 --> 00:44:39,620 তারপর যা বলছেন, ঠিক আছে, আমি আমার ফাইলটি বন্ধ করছি, 577 00:44:39,620 --> 00:44:43,450 মানে আমি ভালো সবকিছু আমি এখনও না লিখতে চাই. 578 00:44:43,450 --> 00:44:45,770 এটা কোন করেনি সবকিছু আউট লিখুন প্রয়োজন 579 00:44:45,770 --> 00:44:49,010 যতক্ষন না আপনি ফাইলটি বন্ধ করতে হয়, এবং তারপর এটি প্রয়োজন. 580 00:44:49,010 --> 00:44:56,220 সুতরাং যে শুধু কি অলস - এটা অপেক্ষা পর্যন্ত এটি ঘটতে হয়েছে. 581 00:44:56,220 --> 00:44:59,990 এই - 51 এবং নেন, তাহলে আপনি তা আরো বিস্তারিতভাবে যাবেন, 582 00:44:59,990 --> 00:45:05,470 কারণ 51 মধ্যে OCaml এবং সবকিছু, সব recursion. 583 00:45:05,470 --> 00:45:08,890 কোন সমাধান, মূলত পুনরাবৃত্ত হয়. 584 00:45:08,890 --> 00:45:11,550 সব recursion, এবং অলস মূল্যায়ন 585 00:45:11,550 --> 00:45:14,790 পরিস্থিতিতে অনেক জন্য গুরুত্বপূর্ণ হতে চলেছে 586 00:45:14,790 --> 00:45:19,920 যেখানে, যদি আপনি আলস্যভরে মূল্যনির্ধারণ না করে থাকেন, এর অর্থ হবে - 587 00:45:19,920 --> 00:45:24,760 উদাহরণ হল স্ট্রিম, যা অসীম দীর্ঘ. 588 00:45:24,760 --> 00:45:30,990 তত্ত্ব, আপনি 1-2-3-4-5-6-7 একটি প্রবাহ স্বাভাবিক সংখ্যার হিসাবে মনে করতে পারেন, 589 00:45:30,990 --> 00:45:33,090 তাই আলসেমি করে বুদ্ধ জিনিষ সূক্ষ্ম. 590 00:45:33,090 --> 00:45:37,210 যদি আমি বলে আমি দশম সংখ্যা চান, তাহলে আমি দশম সংখ্যা নির্ণয় করা আপ করতে পারেন. 591 00:45:37,210 --> 00:45:40,300 যদি আমি শততম নম্বর চান, তাহলে আমি শততম সংখ্যা নির্ণয় করা আপ করতে পারেন. 592 00:45:40,300 --> 00:45:46,290 অলস মূল্যায়ন ছাড়া, তাহলে তা অবিলম্বে সব সংখ্যা নির্ণয় করা চেষ্টা করে যাচ্ছে. 593 00:45:46,290 --> 00:45:50,000 আপনি অনেক অসীম সংখ্যা নির্ণয় করছেন, এবং যে শুধু সম্ভব না. 594 00:45:50,000 --> 00:45:52,080 সুতরাং পরিস্থিতিতে অনেক আছে যেখানে অলস মূল্যায়ন 595 00:45:52,080 --> 00:45:57,840 হয় things কাজ পেয়ে শুধু অপরিহার্য. 596 00:45:57,840 --> 00:46:05,260 >> এখন আমরা সন্নিবেশ যেখানে সন্নিবেশ করা যাচ্ছে লিখতে চান 597 00:46:05,260 --> 00:46:08,430 তার সংজ্ঞা একভাবে পরিবর্তন. 598 00:46:08,430 --> 00:46:10,470 তাই এখনই এটা bool সন্নিবেশ (int মান). 599 00:46:10,470 --> 00:46:23,850 আমরা bool সন্নিবেশ (int মান, নোড * ট্রির মধ্যেকার) যে পরিবর্তন চলুন. 600 00:46:23,850 --> 00:46:29,120 আমরা আসলে করছি কিছুক্ষনের মধ্যে আবার পরিবর্তন করতে যাচ্ছেন, আমরা কেন দেখতে পাবেন. 601 00:46:29,120 --> 00:46:32,210 এবং let এর build_node সরানো ঠিক তা নরক জন্য,, 602 00:46:32,210 --> 00:46:36,730 উপরে আমরা একটি ফাংশন প্রোটোটাইপ লিখুন না সন্নিবেশ করুন. 603 00:46:36,730 --> 00:46:42,450 যা কেবল একটা ইংগিত যে আপনি সন্নিবেশ মধ্যে build_node ব্যবহার করা চলুন. 604 00:46:42,450 --> 00:46:49,590 ঠিক আছে. যে জন্য একটি মিনিট সময় লাগবে. 605 00:46:49,590 --> 00:46:52,130 আমি মনে করি আমি সংস্করণ সংরক্ষিত যদি আপনি যে থেকে বৈঠাচালনা করতে চান, 606 00:46:52,130 --> 00:47:00,240 বা, অন্তত, আমি এখন কি. 607 00:47:00,240 --> 00:47:04,190 আমি একটি সন্নিবেশ পক্ষে যুক্তি সম্পর্কে ভাবতে অসম্মান বিভাজক চেয়েছিলেন, 608 00:47:04,190 --> 00:47:08,750 যদি আপনি মনে করতে পারেন না. 609 00:47:08,750 --> 00:47:12,860 মূলত, আপনি কি কখনো শুধুমাত্র এ পাতার সন্নিবেশ করা হবে. 610 00:47:12,860 --> 00:47:18,640 মত, যদি আমি 1 সন্নিবেশ করুন, তারপরে আমি অবশ্যম্ভাবীরূপে চলেছি যাও 1 সন্নিবেশ করা হবে - 611 00:47:18,640 --> 00:47:21,820 এখানে I'll উপর 1 সন্নিবেশ করা হবে - আমি কালো পরিবর্তন করব. 612 00:47:21,820 --> 00:47:28,070 অথবা যদি আমি 4 সন্নিবেশ, আমি চাই এখানে 4 সন্নিবেশ করা হবে. 613 00:47:28,070 --> 00:47:32,180 সুতরাং কোন ব্যাপার আপনি কি করবেন, আপনি একটি পাত এ সন্নিবেশিত করা চলুন. 614 00:47:32,180 --> 00:47:36,130 আপনাকে যা করতে হবে তা হচ্ছে গাছ পুনরুক্তি নিচে পর্যন্ত আপনি নোড পেতে 615 00:47:36,130 --> 00:47:40,890 যে নোড এর পিতা বা মাতা, নতুন নোড এর ঊর্ধ্বতন করা উচিত, 616 00:47:40,890 --> 00:47:44,560 এবং তারপর তার বাম বা ডান পয়েন্টার, পরিবর্তন কিনা তার উপর নির্ভর করে 617 00:47:44,560 --> 00:47:47,060 এর চেয়ে বড় বা বর্তমান নোড কম. 618 00:47:47,060 --> 00:47:51,180 যে পয়েন্টার আপনার নতুন নোডের নির্দেশ পরিবর্তন করুন. 619 00:47:51,180 --> 00:48:05,490 তাই গাছ পুনরুক্তি নিচে, নতুন পাতার নোড পয়েন্ট করা. 620 00:48:05,490 --> 00:48:09,810 কেন যে আগে পরিস্থিতির টাইপ নিষিদ্ধ সম্পর্কে এছাড়াও মনে, 621 00:48:09,810 --> 00:48:17,990 যেখানে আমি বাইনারি ট্রি নির্মাণ যেখানে এটি সঠিক ছিল 622 00:48:17,990 --> 00:48:19,920 আপনি যদি শুধুমাত্র একটি নোড দিকে তাকিয়ে, 623 00:48:19,920 --> 00:48:24,830 কিন্তু 9 7 বাঁদিকে ছিল যদি আপনি iterated সমস্ত উপায় নিচে. 624 00:48:24,830 --> 00:48:29,770 যাতে এর মধ্যে থেকে এই দৃশ্যকল্প অসম্ভব, - 625 00:48:29,770 --> 00:48:32,530 মনে সম্পর্কে ঢোকাতে 9 বা কিছু; প্রথম নোডের এ, 626 00:48:32,530 --> 00:48:35,350 আমি 7 এবং দেখুন আমি শুধু ডান যেতে যাচ্ছে যাচ্ছি. 627 00:48:35,350 --> 00:48:38,490 তাই আমি কোন ব্যাপার না, যদি আমি যাচ্ছি মাত্র যাও দ্বারা ঢোকাতে চাই, 628 00:48:38,490 --> 00:48:40,790 এবং একটি পাত যথাযথ অ্যালগোরিদম ব্যবহার করে, 629 00:48:40,790 --> 00:48:43,130 এটা করা অসম্ভব জন্য সম্পর্কে 7 বাঁদিকে 9 ঢোকানোর যাচ্ছে 630 00:48:43,130 --> 00:48:48,250 কারণ যত তাড়াতাড়ি আমি 7 আঘাত আমি ডান যেতে চলেছি. 631 00:48:59,740 --> 00:49:02,070 কেউ কি দিয়ে শুরু কিছু আছে? 632 00:49:02,070 --> 00:49:05,480 [ছাত্র] আমি না. >> শিওর. 633 00:49:05,480 --> 00:49:09,200 [ছাত্র, অপাচ্য] 634 00:49:09,200 --> 00:49:14,390 [অন্য ছাত্র, অপাচ্য] 635 00:49:14,390 --> 00:49:18,330 [Bowden] এটা এর প্রশংসা করেন. ঠিক আছে. ব্যাখ্যা করতে চান? 636 00:49:18,330 --> 00:49:20,690 >> [ছাত্র] যেহেতু আমরা জানি যে আমরা ঢোকাতে হয় 637 00:49:20,690 --> 00:49:24,060 গাছ শেষে নতুন নোড, 638 00:49:24,060 --> 00:49:28,070 আমি গাছ মাধ্যমে iteratively কর্তিত 639 00:49:28,070 --> 00:49:31,360 যতক্ষণ না আমি একটি নোডের মধ্যে যে নাল তীক্ষ্ন যাও না. 640 00:49:31,360 --> 00:49:34,220 এবং তারপর আমি এটা করা হয় ডাইন বা বাম পাশে করার সিদ্ধান্ত নিয়েছে 641 00:49:34,220 --> 00:49:37,420 এই অধিকার ভেরিয়েবল ব্যবহার করে; এটা সম্পর্কে বলা যেখানে যাও লাগাতে হবে. 642 00:49:37,420 --> 00:49:41,850 এবং তারপর মূলত,, আমি ঠিক করেন যে শেষ - 643 00:49:41,850 --> 00:49:47,520 যে নতুন নোডের মধ্যে যে এটা তৈরি হয়েছিল temp নোড পয়েন্ট, 644 00:49:47,520 --> 00:49:50,770 হয় বাম বা ডান পাশের সাইড কি অধিকার মান ছিল, তার উপর নির্ভর করে. 645 00:49:50,770 --> 00:49:56,530 অবশেষে, আমি নতুন করে পরীক্ষার মান নোড মান সেট. 646 00:49:56,530 --> 00:49:59,550 [Bowden] ঠিক আছে, তাই আমি এখানে একটি বিষয় দেখুন. 647 00:49:59,550 --> 00:50:02,050 এই উপায় আছে 95% মত. 648 00:50:02,050 --> 00:50:07,550 এক সমস্যা যে আমি দেখতে ভাল,, অন্য কেউ একটি বিষয় না দেখতে? 649 00:50:07,550 --> 00:50:18,400 অবস্থার অধীন তারা লুপ বিরতি আউট কি? 650 00:50:18,400 --> 00:50:22,100 [ছাত্র] যদি temp হয় নাল? >> হ্যাঁ. সুতরাং কিভাবে আপনি লুপের আউট বিরতি হয় যদি temp নাল হয়. 651 00:50:22,100 --> 00:50:30,220 আমি কিন্তু কি করবেন ঠিক? 652 00:50:30,220 --> 00:50:35,410 আমি dereference temp, যা অবশ্যম্ভাবীরূপে নাল. 653 00:50:35,410 --> 00:50:39,840 সুতরাং অন্যান্য জিনিস আপনাকে কেবল মাত্র ট্র্যাক পর্যন্ত temp হয় নাল রাখা হয় না, 654 00:50:39,840 --> 00:50:45,590 আপনি প্যারেন্ট সব সময়ে ট্র্যাক রাখতে চান. 655 00:50:45,590 --> 00:50:52,190 আমরা নোড * ঊর্ধ্বতন চান, আমি অনুমান আমরা এ নাল প্রথম যে রাখতে পারেন. 656 00:50:52,190 --> 00:50:55,480 এই ট্রি রুট জন্য অদ্ভুত আচরণ আছে যাচ্ছে, 657 00:50:55,480 --> 00:50:59,210 কিন্তু আমরা যে পাবেন. 658 00:50:59,210 --> 00:51:03,950 যদি মান যাই হোক না কেন তার চেয়ে অনেক বেশী, তাহলে temp = temp অধিকার. 659 00:51:03,950 --> 00:51:07,910 কিন্তু আগে আমরা যে, পিতা বা মাতা = temp. 660 00:51:07,910 --> 00:51:14,500 অথবা বাবা হয় সর্বদা সমান temp যাব? এটা কি কেস? 661 00:51:14,500 --> 00:51:19,560 যদি temp নাল নয়, তারপরে আমি নিচে নামাও, কোনো ব্যাপার নয় চলেছি, 662 00:51:19,560 --> 00:51:24,030 একটি নোডের জন্য যা temp হয় পিতা বা মাতা. 663 00:51:24,030 --> 00:51:27,500 সুতরাং পিতা বা মাতা যাও temp হবে, এবং তারপর এর নিচে আমি temp সরাতে. 664 00:51:27,500 --> 00:51:32,410 এখন temp হয় নাল, কিন্তু জিনিস যা নাল অভিভাবক পিতামাতার পয়েন্ট. 665 00:51:32,410 --> 00:51:39,110 তাই নিচে এখানে, আমি অধিকার সমান 1 সেট করতে না চান. 666 00:51:39,110 --> 00:51:41,300 তাই আমি অধিকার সরানো, তাই যদি ডান = 1, 667 00:51:41,300 --> 00:51:45,130 এবং আমি অনুমান তবে আপনাকে কাজ করতে চান - 668 00:51:45,130 --> 00:51:48,530 যদি আপনি বাঁদিকে সরানো, আপনি 0 অধিকার সমান সেট করতে চান. 669 00:51:48,530 --> 00:51:55,950 অন্যথায় যদি আপনি কখনও অধিকার সরানো. 670 00:51:55,950 --> 00:51:58,590 সুতরাং অধিকার = 0. যদি অধিকার = 1, 671 00:51:58,590 --> 00:52:04,260 এখন আমরা পিতামাতার অধিকার পয়েন্টার newnode করতে চাই, 672 00:52:04,260 --> 00:52:08,520 অন্যথায় আমরা পিতামাতার বাম পয়েন্টার newnode করতে চাই. 673 00:52:08,520 --> 00:52:16,850 যে প্রশ্ন? 674 00:52:16,850 --> 00:52:24,880 ঠিক আছে. তাই এই ভাবেই আমরা - ভাল, আসলে, পরিবর্তে এই করছেন, 675 00:52:24,880 --> 00:52:29,630 আমরা অর্ধেক আপনি build_node ব্যবহার প্রত্যাশিত. 676 00:52:29,630 --> 00:52:40,450 এবং তারপর যদি newnode সমান নাল, মিথ্যা ফিরে. 677 00:52:40,450 --> 00:52:44,170 এটা যে. এখন, এই কি আমরা কি আশা. 678 00:52:44,170 --> 00:52:47,690 >> এটা কি কর্মীরা সমাধান করবেন. 679 00:52:47,690 --> 00:52:52,360 এই সঙ্গে আমি "অধিকার" এটি সম্পর্কে না করে উপায় হিসাবে অসম্মতি 680 00:52:52,360 --> 00:52:57,820 কিন্তু এই পুরোপুরি জরিমানা এবং এটি কাজ করবে. 681 00:52:57,820 --> 00:53:02,840 একটা জিনিষ যে এখন একটু অদ্ভুত অধিকার হয় 682 00:53:02,840 --> 00:53:08,310 যদি গাছ নাল হিসাবে আরম্ভ বন্ধ, আমরা একটি নাল গাছ পাস. 683 00:53:08,310 --> 00:53:12,650 আমি অনুমান এটি কিভাবে আপনি একটি নাল ট্রির ক্ষণস্থায়ী আচরণ নির্ধারণ করুন উপর নির্ভর করে. 684 00:53:12,650 --> 00:53:15,490 আমি যে আপনি যদি একটি নাল গাছ পাস মনে, 685 00:53:15,490 --> 00:53:17,520 তারপর একটি নাল গাছ মধ্যে মান সন্নিবেশ 686 00:53:17,520 --> 00:53:23,030 একটি গাছ ঠিক যেখানে শুধুমাত্র মান হল যে একক নোড ফেরত পাঠাবেন. 687 00:53:23,030 --> 00:53:25,830 যে লোকেদের সাথে কি একমত? যদি আপনি চান,, পারা 688 00:53:25,830 --> 00:53:28,050 যদি আপনি একটি নাল গাছ পাস 689 00:53:28,050 --> 00:53:31,320 এবং আপনি তা একটি মান সন্নিবেশ করতে চান, মিথ্যা ফিরে. 690 00:53:31,320 --> 00:53:33,830 এটা সংজ্ঞায়িত আপনি আপ এর. 691 00:53:33,830 --> 00:53:38,320 প্রথম জিনিস আমি এবং তারপর না - 692 00:53:38,320 --> 00:53:40,720 ভাল, আপনি যে কষ্ট করছেন আছে যাচ্ছে, কারণ করছি 693 00:53:40,720 --> 00:53:44,090 এটা সহজ যদি আমরা একটা বিশ্ব পয়েন্টার ছিল হবে, 694 00:53:44,090 --> 00:53:48,570 কিন্তু তাই আমরা যদি গাছ হয় নাল না, না, কিছুই আমরা যে বিষয়ে কি করতে পারেন. 695 00:53:48,570 --> 00:53:50,960 আমরা শুধু ফিরে মিথ্যা পারেন. 696 00:53:50,960 --> 00:53:52,840 আমি সন্নিবেশ পরিবর্তন যাচ্ছি. 697 00:53:52,840 --> 00:53:56,540 টেকনিক্যালি আমরা শুধু এই অধিকার এখানে পরিবর্তন করতে পারে, 698 00:53:56,540 --> 00:53:58,400 কিভাবে এটি জিনিষ এর উপর iterating, 699 00:53:58,400 --> 00:54:04,530 কিন্তু আমি সন্নিবেশ যাও ** গাছ নিতে নোডের মধ্যে পরিবর্তন করতে যাচ্ছেন না. 700 00:54:04,530 --> 00:54:07,510 ডবল পয়েন্টার দেয়া হল. 701 00:54:07,510 --> 00:54:09,710 এর মানে কি? 702 00:54:09,710 --> 00:54:12,330 পরিবর্তে পয়েন্টার নোডের সাথে আচরণ, 703 00:54:12,330 --> 00:54:16,690 জিনিস আমি করা সাধিত চলেছি এই পয়েন্টার. 704 00:54:16,690 --> 00:54:18,790 আমি এই পয়েন্টার সাধিত হবে না. 705 00:54:18,790 --> 00:54:21,770 আমি সরাসরি পয়েন্টার সাধিত হবে না. 706 00:54:21,770 --> 00:54:25,760 এই অর্থ থেকে নিচে আমার, মনে হয় - 707 00:54:25,760 --> 00:54:33,340 ভাল, এখন ডান এই পয়েন্ট নাল যাও. 708 00:54:33,340 --> 00:54:38,130 আমি কি করে যেতে চাই এই পয়েন্টার যাও না নাল নির্দেশ নিপূণভাবে. 709 00:54:38,130 --> 00:54:40,970 আমি এটা আমার নতুন নোডের নির্দেশ চান. 710 00:54:40,970 --> 00:54:44,870 যদি আমি পয়েন্টার আমার পয়েন্টার ট্র্যাক রাখা, 711 00:54:44,870 --> 00:54:47,840 তারপর আমি একটা ঊর্ধ্বতন পয়েন্টার ট্র্যাক রাখতে হবে না. 712 00:54:47,840 --> 00:54:52,640 আমি ট্র্যাক যাও যদি যাও NULL পয়েন্টার প্রতি নির্দেশ আছে তা দেখতে রাখতে পারেন, 713 00:54:52,640 --> 00:54:54,580 এবং যদি পয়েন্টার প্রতি নির্দেশ করা হয় নাল যাও, 714 00:54:54,580 --> 00:54:57,370 এটি নোড আমি চাই নির্দেশ পরিবর্তন. 715 00:54:57,370 --> 00:55:00,070 এবং আমি এটি পরিবর্তন যেহেতু আমি পয়েন্টার একটি পয়েন্টার হতে পারে. 716 00:55:00,070 --> 00:55:02,040 এর এই অধিকার এখন চলুন দেখা যাক. 717 00:55:02,040 --> 00:55:05,470 আপনি আসলে এটি recursively প্রশংসনীয় সহজেই করতে পারেন. 718 00:55:05,470 --> 00:55:08,080 আমরা কি সেটা চান? 719 00:55:08,080 --> 00:55:10,980 হ্যাঁ, আমরা না. 720 00:55:10,980 --> 00:55:16,790 >> চলুন recursively এটি দেখুন. 721 00:55:16,790 --> 00:55:24,070 প্রথমত, আমাদের কি বেস মামলা হবে? 722 00:55:24,070 --> 00:55:29,140 প্রায় সবসময় আমাদের বেস ক্ষেত্রে; আসলে কিন্তু, এই কূট ধরনের. 723 00:55:29,140 --> 00:55:34,370 প্রথম প্রথম জিনিষ, যদি (ট্রি == NULL) 724 00:55:34,370 --> 00:55:37,550 আমি অনুমান করছি আমরা শুধু মিথ্যা ফিরে যাচ্ছে. 725 00:55:37,550 --> 00:55:40,460 এটি আপনার ট্রি হচ্ছে নাল থেকে ভিন্ন. 726 00:55:40,460 --> 00:55:44,510 এটি আপনার রুট হচ্ছে পয়েন্টার নাল পয়েন্টার যাও 727 00:55:44,510 --> 00:55:48,360 যার মানে আপনার রুট পয়েন্টার বিদ্যমান নেই. 728 00:55:48,360 --> 00:55:52,390 তাই নিচে এখানে, যদি আমি না 729 00:55:52,390 --> 00:55:55,760 নোড * - এর দেওয়া ঠিক এই পুনরায়. 730 00:55:55,760 --> 00:55:58,960 নোড * রুট = শূন্য, 731 00:55:58,960 --> 00:56:00,730 এবং তারপর আমি ভালো কিছু করে ঘরে সন্নিবেশ কল চলেছি, 732 00:56:00,730 --> 00:56:04,540 ও root-র মধ্যে সন্নিবেশ 4. 733 00:56:04,540 --> 00:56:06,560 সুতরাং & root পরিচয়ে, যদি root পরিচয় হয় একটি নোড * 734 00:56:06,560 --> 00:56:11,170 তারপর ও root-র একটি নোড ** হবে. 735 00:56:11,170 --> 00:56:15,120 এটা বৈধ. এই ক্ষেত্রে, বৃক্ষ পর্যন্ত, এখানে, 736 00:56:15,120 --> 00:56:20,120 অথবা সন্নিবেশ - ট্রি নাল নয়. 737 00:56:20,120 --> 00:56:24,630 এখানে. বৃক্ষ হয় নাল না; * গাছ হয় নাল, যা সূক্ষ্ম 738 00:56:24,630 --> 00:56:26,680 কারণ যদি * গাছ হয় নাল তারপর, আমি এটা করতে পারেন নিপূণভাবে 739 00:56:26,680 --> 00:56:29,210 যাও এখন কি আমি তা নির্দেশ করতে চান, তাদের প্রতি নির্দেশ করুন. 740 00:56:29,210 --> 00:56:34,750 কিন্তু যদি গাছ হয় নাল, তার মানে আমি এখানে নিচে আসেন এবং বলেন নাল. 741 00:56:34,750 --> 00:56:42,710 যে অর্থে দেখা যায় না. আমি যে কিছুই করতে পারবো না. 742 00:56:42,710 --> 00:56:45,540 যদি গাছ হয় নাল, মিথ্যা ফিরে. 743 00:56:45,540 --> 00:56:48,220 তাই আমি মূলত ইতিমধ্যে বলেন কি আমাদের বাস্তব বেস মামলা হয়. 744 00:56:48,220 --> 00:56:50,580 এবং যে কি হতে যাচ্ছে? 745 00:56:50,580 --> 00:56:55,030 [ছাত্র, অপাচ্য] 746 00:56:55,030 --> 00:57:00,000 [Bowden] হ্যাঁ. তাই আপনি যদি (* গাছ == NULL). 747 00:57:00,000 --> 00:57:04,520 এই ক্ষেত্রে এখানে উপর সম্পর্কিত 748 00:57:04,520 --> 00:57:09,640 যেখানে যদি আমার লাল পয়েন্টার হয় পয়েন্টার আমি উপর নিবদ্ধ করছি, 749 00:57:09,640 --> 00:57:12,960 যেমন আমি এই পয়েন্টার উপর নিবদ্ধ করছি এখন, আমি এই পয়েন্টার উপর নিবদ্ধ করছি. 750 00:57:12,960 --> 00:57:15,150 এখন আমি এই পয়েন্টার উপর নিবদ্ধ করছি. 751 00:57:15,150 --> 00:57:18,160 তাই আপনি যদি আমার লাল পয়েন্টার, যা আমার নোড **, 752 00:57:18,160 --> 00:57:22,880 আগের - * যদি, আমার লাল পয়েন্টার, আগের নাল, 753 00:57:22,880 --> 00:57:28,470 তার মানে আমি ক্ষেত্রে যেখানে আমি একটি পয়েন্টার যে পয়েন্ট উপর মনোযোগ নিবদ্ধ করা হবে - 754 00:57:28,470 --> 00:57:32,530 এই একটি মাত্র পয়েন্টার সঙ্গে জড়িত. 755 00:57:32,530 --> 00:57:41,090 আমি এই পয়েন্টার আমার নতুন নোডের নির্দেশ পরিবর্তন করতে চান. 756 00:57:41,090 --> 00:57:45,230 এখানে উপরে ফিরে আসুন. 757 00:57:45,230 --> 00:57:56,490 আমার newnode ঠিক করা নোডের * n = build_node (মান) হবে 758 00:57:56,490 --> 00:58:07,300 তারপর n = শূন্য যদি হবে, মিথ্যা ফিরে. 759 00:58:07,300 --> 00:58:12,600 অন্যথায় আমরা কি পয়েন্টার বর্তমানে হয় প্রতি নির্দেশ পরিবর্তন করতে চান 760 00:58:12,600 --> 00:58:17,830 যাও এখন আমাদের সদ্য নির্মিত নোড দিকে নির্দেশ করে. 761 00:58:17,830 --> 00:58:20,280 আমরা আসলে কি যে এখানে করতে পারেন. 762 00:58:20,280 --> 00:58:30,660 পরিবর্তে n বলছে, আমরা বলতে ট্রি * = * যদি গাছ. 763 00:58:30,660 --> 00:58:35,450 প্রত্যেকেরই যে বোঝেন? যে পয়েন্টার পয়েন্টার সাথে আচরণ, 764 00:58:35,450 --> 00:58:40,750 আমরা জিনিস আমরা তাদের প্রতি নির্দেশ করতে চান, তাদের নির্দেশ নাল পয়েন্টার পরিবর্তন করতে পারেন. 765 00:58:40,750 --> 00:58:42,820 এটা আমাদের বেস কেস. 766 00:58:42,820 --> 00:58:45,740 >> এখন আমাদের পুনরাবৃত্তি, অথবা আমাদের recursion, 767 00:58:45,740 --> 00:58:51,430 অন্য সব recursions আমরা কাজ করছি খুব অনুরূপ হবে. 768 00:58:51,430 --> 00:58:55,830 আমরা মান সন্নিবেশ করুন চান চলুন, 769 00:58:55,830 --> 00:58:59,040 এবং এখন আমি আবার তিন ব্যবহার করে যাচ্ছে, কিন্তু করছি কি না আমাদের অবস্থা হতে যাচ্ছে? 770 00:58:59,040 --> 00:59:05,180 না কি এটি আমরা কি আমরা বাম বা ডান যেতে চান সিদ্ধান্ত খুঁজছেন? 771 00:59:05,180 --> 00:59:07,760 চলুন শুরু করা যাক পৃথক ধাপ মধ্যে তা করে. 772 00:59:07,760 --> 00:59:18,850 যদি (মান <) কি? 773 00:59:18,850 --> 00:59:23,200 [ছাত্র] গাছ এর মান? 774 00:59:23,200 --> 00:59:27,490 [Bowden] তাই আমি মনে রাখবেন বর্তমানে না - 775 00:59:27,490 --> 00:59:31,260 [ছাত্র, অপাচ্য] 776 00:59:31,260 --> 00:59:34,140 [Bowden] হ্যাঁ, তাই সরাসরি কিছু বলতে যে এই সবুজ তীর 777 00:59:34,140 --> 00:59:39,050 কি বর্তমানে গাছ হল একটি উদাহরণ, এই পয়েন্টার একটি পয়েন্টার. 778 00:59:39,050 --> 00:59:46,610 সুতরাং তার মানে আমি 3 যাও একটি পয়েন্টার একটি পয়েন্টার. 779 00:59:46,610 --> 00:59:48,800 dereference দুবার ধ্বনিত ভাল. 780 00:59:48,800 --> 00:59:51,010 আমি কি - না কিভাবে আমি তা করতে? 781 00:59:51,010 --> 00:59:53,210 [ছাত্র] একবার Dereference, এবং তারপর তীর যে কি উপায়? 782 00:59:53,210 --> 00:59:58,420 [Bowden] তাই (* ট্রির মধ্যেকার) হয় একবার dereference, -> মূল্য 783 00:59:58,420 --> 01:00:05,960 যাও সম্পর্কে নোড যে আমি পরোক্ষভাবে নিকট প্রতি নির্দেশ মূল্য দিতে হবে. 784 01:00:05,960 --> 01:00:11,980 তাই আমি লিখতে পারেন এটি tree.value ** আপনি যদি চান যে. 785 01:00:11,980 --> 01:00:18,490 কাজ হয়. 786 01:00:18,490 --> 01:00:26,190 যদি হয় কেস, তারপরে আমি মান সন্নিবেশ কল করতে চান. 787 01:00:26,190 --> 01:00:32,590 এবং কি আমার নোড আপডেট ** না হতে যাচ্ছে? 788 01:00:32,590 --> 01:00:39,440 আমি বাম যেতে চান, তাই ** tree.left আমার বাম হবে. 789 01:00:39,440 --> 01:00:41,900 এবং আমি যে জিনিস যাও পয়েন্টার চান 790 01:00:41,900 --> 01:00:44,930 যাতে যদি বাম আপ শেষ হচ্ছে নাল পয়েন্টার, 791 01:00:44,930 --> 01:00:48,360 আমি আমার নতুন নোডের দিকে নির্দেশ করে এটি পরিবর্তন করা যায়. 792 01:00:48,360 --> 01:00:51,460 >> এবং অন্যান্য ক্ষেত্রে খুব অনুরূপ হতে পারে. 793 01:00:51,460 --> 01:00:55,600 চলুন আসলে যে আমার তিন ডান এখন না. 794 01:00:55,600 --> 01:01:04,480 মান যদি মান <(** গাছ). মান সন্নিবেশ করুন. 795 01:01:04,480 --> 01:01:11,040 তারপর আমরা আমাদের বাম ** আপডেট করতে চান, 796 01:01:11,040 --> 01:01:17,030 অন্যথায় আমরা অধিকার আমাদের ** আপডেট করতে চান. 797 01:01:17,030 --> 01:01:22,540 [ছাত্র] যে পয়েন্টার যাও পয়েন্টার কি পেতে পারি? 798 01:01:22,540 --> 01:01:30,940 [Bowden] মনে রাখবেন - ** tree.right একটি নোড তারকা. 799 01:01:30,940 --> 01:01:35,040 [ছাত্র, অপাচ্য] >> হ্যাঁ. 800 01:01:35,040 --> 01:01:41,140 ** Tree.right এই পয়েন্টার অথবা এরকম কিছু একটা হয়. 801 01:01:41,140 --> 01:01:45,140 তাই একটা পয়েন্টার গ্রহণ করে, যে সম্পর্কে দেয় আমি কি করতে চান 802 01:01:45,140 --> 01:01:50,090 যে লোক যাও পয়েন্টার. 803 01:01:50,090 --> 01:01:54,260 [ছাত্র] আমরা আবার যেতে উপর কেন আমরা দুটি পয়েন্টার ব্যবহার করে থাকেন যায়নি? 804 01:01:54,260 --> 01:01:58,220 [Bowden] হ্যাঁ. তাই - না, আপনি এবং, যে আগে সমাধান করতে পারেন 805 01:01:58,220 --> 01:02:04,540 ছিল দুই পয়েন্টার করছেন ছাড়া এরকম একটি উপায়. 806 01:02:04,540 --> 01:02:08,740 আপনি দুই পয়েন্টার ব্যবহার করে বুঝতে সক্ষম হতে হবে, 807 01:02:08,740 --> 01:02:11,660 এবং এই একটি ক্লিনার সমাধান. 808 01:02:11,660 --> 01:02:16,090 এছাড়াও, নোটিশ, কি যদি আমার ট্রি - 809 01:02:16,090 --> 01:02:24,480 যদি আমার রুট ছিল নাল কি? যদি আমি এই ক্ষেত্রে কি অধিকার এখানে কি হয়? 810 01:02:24,480 --> 01:02:30,540 সুতরাং নোড * রুট = শূন্য, root-র মধ্যে সন্নিবেশ 4. 811 01:02:30,540 --> 01:02:35,110 না কি পরে root-র এই হতে যাচ্ছে? 812 01:02:35,110 --> 01:02:37,470 [ছাত্র, অপাচ্য] >> হ্যাঁ. 813 01:02:37,470 --> 01:02:41,710 Root-র মান 4 হবে. 814 01:02:41,710 --> 01:02:45,510 Root-র বাম যাও নাল হবে, root-র অধিকার নাল হবে. 815 01:02:45,510 --> 01:02:49,490 Root-র ক্ষেত্রে, যেখানে আমরা ঠিকানা দ্বারা পাস না, 816 01:02:49,490 --> 01:02:52,490 আমরা রুট পরিবর্তন করতে পারে. 817 01:02:52,490 --> 01:02:56,020 ইন কেস যেখানে গাছ - যেখানে রুট ছিল নাল, 818 01:02:56,020 --> 01:02:58,410 আমরা শুধু মিথ্যা ফিরিয়ে দিতে হয়. আমরা কিছুই করতে পারে নাই. 819 01:02:58,410 --> 01:03:01,520 আমরা একটি খালি ট্রি একটি নোডের মধ্যে সন্নিবেশ করা যাবে না. 820 01:03:01,520 --> 01:03:06,810 আমরা শুধু এক নোডের মধ্যে ট্রি একটি খালি ট্রি করা; কিন্তু এখন আমরা করতে পারেন. 821 01:03:06,810 --> 01:03:13,400 সাধারণতঃ প্রত্যাশিত উপায় যে এটি কাজ অনুমিত এর. 822 01:03:13,400 --> 01:03:21,610 >> উপরন্তু, এই সময়ের তুলনায় উল্লেখযোগ্যভাবে খাটো 823 01:03:21,610 --> 01:03:26,240 এছাড়াও প্যারেন্ট অবগত থাকার, এবং যাতে আপনি সমস্ত উপায় পুনরুক্তি ডাউন. 824 01:03:26,240 --> 01:03:30,140 এখন আমি আমার পিতা বা মাতা আছে, এবং আমি আমার সবটা পিতামাতার অধিকার পয়েন্টার আছে. 825 01:03:30,140 --> 01:03:35,640 পরিবর্তে, আমরা যদি এই iteratively দিত, তাহলে যখন একটি লুপ সঙ্গে একই ধারণা হতে চাই. 826 01:03:35,640 --> 01:03:38,100 কিন্তু এর পরিবর্তে আমার পিতা বা মাতা পয়েন্টার নিয়ে হচ্ছে, 827 01:03:38,100 --> 01:03:40,600 পরিবর্তে আমার বর্তমান পয়েন্টার জিনিস হবে 828 01:03:40,600 --> 01:03:43,790 সরাসরি যে আমি আমার নতুন নোডের নির্দেশ পরিবর্তন করছি. 829 01:03:43,790 --> 01:03:46,090 আমি তা বাম প্রতি নির্দেশ এর মোকাবেলা করতে হবে না. 830 01:03:46,090 --> 01:03:48,810 আমি তা ডান দিকে ইশারা এর মোকাবেলা করতে হবে না. 831 01:03:48,810 --> 01:04:00,860 এটি শুধু যাই হোক না কেন এই পয়েন্টার, আমি না এটা আমার নতুন নোডের নির্দেশ সেট যাচ্ছি. 832 01:04:00,860 --> 01:04:05,740 প্রত্যেকেরই বুঝতে কীভাবে এটি কাজ করে? 833 01:04:05,740 --> 01:04:09,460 যদি না হয় তাহলে কেন আমরা তা এই ভাবে কাজ করতে চান না, 834 01:04:09,460 --> 01:04:14,920 কিন্তু অন্তত যে একটি সমাধান হিসেবে এই কাজ করে? 835 01:04:14,920 --> 01:04:17,110 [ছাত্র] কোথায় আমরা সত্য না ফিরে? 836 01:04:17,110 --> 01:04:21,550 [Bowden] এটা সম্ভবত ঠিক এখানে. 837 01:04:21,550 --> 01:04:26,690 যদি সঠিকভাবে আমরা এটি সন্নিবেশ, সত্য ফিরে. 838 01:04:26,690 --> 01:04:32,010 অন্যথায়, এখানে নিচে আমরা যাহা সন্নিবেশ করতে চান আয় ফিরে চলুন. 839 01:04:32,010 --> 01:04:35,950 >> এবং কি এই recursive ফাংশন সম্পর্কে বিশেষ? 840 01:04:35,950 --> 01:04:43,010 এটা লেঙ্গুড় recursive, তাই যতদিন আমরা কিছু অপ্টিমাইজেশান সঙ্গে সঙ্কলন, 841 01:04:43,010 --> 01:04:48,060 এটা যে স্বীকার করে এবং আপনি এই থেকে একটি স্ট্যাক ওভারফ্লো কখনও পাবেন, 842 01:04:48,060 --> 01:04:53,230 এমনকি যদি আমাদের গাছ 10,000 বা 10 মিলিয়ন উচ্চতা আছে. 843 01:04:53,230 --> 01:04:55,630 [ছাত্র, অপাচ্য] 844 01:04:55,630 --> 01:05:00,310 [Bowden] আমার মনে হয় এটা Dash এ এটা আছে - বা কি অপ্টিমাইজেশান স্তর 845 01:05:00,310 --> 01:05:03,820 একটি লেঙ্গুড় recursion করা স্বীকৃত যাও জন্য প্রয়োজন বোধ করা হয়. 846 01:05:03,820 --> 01:05:09,350 আমার মনে হয় এটা স্বীকার করে - জিসিসি এবং ঝনঝন 847 01:05:09,350 --> 01:05:12,610 এছাড়াও তাদের অপ্টিমাইজেশান মাত্রা ভিন্ন অর্থ আছে. 848 01:05:12,610 --> 01:05:17,870 আমি এটা DashO 2, নিশ্চিত যে এটি লেঙ্গুড় recursion চিনতে হবে জন্য বলতে চাই. 849 01:05:17,870 --> 01:05:27,880 কিন্তু আমরা - আপনি একটি উদাহরণ Fibonocci বা এরকম কিছু গঠন করা যেতে পারে. 850 01:05:27,880 --> 01:05:30,030 এটা, কারণ এটা যাও গঠন করা কঠিন সহজ সঙ্গে এই পরীক্ষা না 851 01:05:30,030 --> 01:05:32,600 একটি বাইনারি গাছ যে এত বড়. 852 01:05:32,600 --> 01:05:37,140 তবে হাঁ, আমি মনে করি DashO 2, যে 853 01:05:37,140 --> 01:05:40,580 যদি আপনি DashO 2 সঙ্গে সঙ্কলন, এটি লেঙ্গুড় recursion জন্য চেহারা হবে 854 01:05:40,580 --> 01:05:54,030 আশাবাদী হওয়া এবং যে আউট. 855 01:05:54,030 --> 01:05:58,190 এর ফিরে যাওয়া যাক - সন্নিবেশ আক্ষরিক এর শেষ জিনিস এটি প্রয়োজন. 856 01:05:58,190 --> 01:06:04,900 চলুন শুরু করা যাক সন্নিবেশ এখানে উপর ফিরে যান 857 01:06:04,900 --> 01:06:07,840 যেখানে আমরা একই ধারণা করতে যাচ্ছেন. 858 01:06:07,840 --> 01:06:14,340 এটা এখনও সম্পূর্নরূপে হ্যান্ডেল করতে পারবে না খুঁত করতে হবে 859 01:06:14,340 --> 01:06:17,940 যখন রুট নিজেই নাল, বা অতীতের এন্ট্রি হয় নাল, 860 01:06:17,940 --> 01:06:20,060 কিন্তু এর পরিবর্তে একটি ঊর্ধ্বতন পয়েন্টারের সাথে ডিল, 861 01:06:20,060 --> 01:06:27,430 যাক এর পয়েন্টার যাও পালন পয়েন্টার একই যুক্তি প্রযোজ্য. 862 01:06:27,430 --> 01:06:35,580 যদি এখানে আমরা আমাদের নোড ** নেড়িকুত্তা রাখা, 863 01:06:35,580 --> 01:06:37,860 এবং আমরা ট্র্যাক রাখতে অধিকার আর দরকার নেই, 864 01:06:37,860 --> 01:06:47,190 কিন্তু নোড ** নেড়িকুত্তা = & গাছ. 865 01:06:47,190 --> 01:06:54,800 এবং এখন আমাদের সময় লুপ যখন * বর্তমান আছে সমান নাল না হবে. 866 01:06:54,800 --> 01:07:00,270 কি আর বাবা সম্পর্কে অবগত রাখা প্রয়োজন নেই. 867 01:07:00,270 --> 01:07:04,180 কি বাম এবং ডান সম্পর্কে অবগত রাখা প্রয়োজন নেই. 868 01:07:04,180 --> 01:07:10,190 এবং আমি এটা temp কল, কারণ ইতিমধ্যে আমরা temp ব্যবহার করছেন করব. 869 01:07:10,190 --> 01:07:17,200 ঠিক আছে. তাই আপনি যদি (মান> * temp), 870 01:07:17,200 --> 01:07:24,010 তারপর & (* temp) -> ডানে 871 01:07:24,010 --> 01:07:29,250 অন্য temp = & (* temp) -> বাকি. 872 01:07:29,250 --> 01:07:32,730 এবং এখন, এই সময়ে, পরে যখন এই লুপ, 873 01:07:32,730 --> 01:07:36,380 আমি শুধুমাত্র এই কি কারণ হতে পারে এটি সহজ সম্পর্কে iteratively তুলনায় recursively মনে, 874 01:07:36,380 --> 01:07:39,010 কিন্তু পরে যখন এই লুপ, 875 01:07:39,010 --> 01:07:43,820 * Temp হয় পয়েন্টার আমরা পরিবর্তন চাই. 876 01:07:43,820 --> 01:07:48,960 >> আগে আমরা ঊর্ধ্বতন ছিল, এবং আমরা হয়ত বাম পিতা বা মাতা বা অভিভাবক অধিকার পরিবর্তন করতে চান, 877 01:07:48,960 --> 01:07:51,310 কিন্তু যদি আমরা পিতামাতার অধিকার পরিবর্তন করতে চান, 878 01:07:51,310 --> 01:07:54,550 তারপর * temp হয় ঊর্ধ্বতন অধিকার, এবং আমরা এটি সরাসরি পরিবর্তন করতে পারেন. 879 01:07:54,550 --> 01:08:05,860 তাই নিচে এখানে, আমরা * temp = newnode না, এবং যে এটি করতে পারেন. 880 01:08:05,860 --> 01:08:09,540 বিজ্ঞপ্তি, তাই আমরা এই সব করেছিল লাইনের কোড নিতে আউট ছিল. 881 01:08:09,540 --> 01:08:14,770 যাতে সব পিতা বা মাতা যে অতিরিক্ত প্রচেষ্টার ট্র্যাক রাখা. 882 01:08:14,770 --> 01:08:18,689 এখানে, যদি আমরা পয়েন্টার যাও পয়েন্টার ট্র্যাক রাখতে, 883 01:08:18,689 --> 01:08:22,990 এমনকি যদি আমরা এই সব কোঁকড়া ধনুর্বন্ধনী পরিত্রাণ এখন পেতে চেয়েছিল, 884 01:08:22,990 --> 01:08:27,170 এটি খাটো চেহারা. 885 01:08:27,170 --> 01:08:32,529 এটি এখন সঠিক একই সমাধান, 886 01:08:32,529 --> 01:08:38,210 কিন্তু কোড কম লাইন. 887 01:08:38,210 --> 01:08:41,229 একবার আপনি একটি বৈধ সমাধান হিসাবে এই স্বীকৃতি, 888 01:08:41,229 --> 01:08:43,529 এটি এর মত তুলনায় অনেক সহজ কারণ সম্পর্কে যাও, ঠিক আছে, 889 01:08:43,529 --> 01:08:45,779 কেন আমি int-এ ডান দিকে এই পতাকা আছে? 890 01:08:45,779 --> 01:08:49,290 এর অর্থ কি? ওহ, এটা যে বোধক 891 01:08:49,290 --> 01:08:51,370 প্রত্যেক সময় আমি ডানে যান, আমি সেটা সেট প্রয়োজন, 892 01:08:51,370 --> 01:08:53,819 অন্যথায় যদি আমি কি বাকি আমি শূন্য সেট প্রয়োজন. 893 01:08:53,819 --> 01:09:04,060 এখানে, আমি যে কারণে হয় না; এটি শুধু সহজ সম্পর্কে চিন্তা করা. 894 01:09:04,060 --> 01:09:06,710 প্রশ্ন? 895 01:09:06,710 --> 01:09:16,290 [ছাত্র, অপাচ্য] >> হ্যাঁ. 896 01:09:16,290 --> 01:09:23,359 ঠিক আছে, তাই শেষ বিট - 897 01:09:23,359 --> 01:09:28,080 আমি অনুমান একটি দ্রুত এবং সহজ ফাংশন আমরা কি করতে পারি হয়, 898 01:09:28,080 --> 01:09:34,910 let's - একসাথে, আমি অনুমান, এবং চেষ্টা লিখুন একটি ফাংশন রয়েছে 899 01:09:34,910 --> 01:09:38,899 যা কিনা এটি একটি বাইনারি অনুসন্ধান বৃক্ষ না যত্ন. 900 01:09:38,899 --> 01:09:43,770 এই ফাংশন রয়েছে সত্য ফিরে উচিত 901 01:09:43,770 --> 01:09:58,330 এই সাধারণ বাইনারি ট্রির যদি কোথাও হয় মান আমরা খুঁজছেন. 902 01:09:58,330 --> 01:10:02,520 সুতরাং এর প্রথম এটি recursively না দেওয়া এবং তারপর আমরা এটি iteratively করব. 903 01:10:02,520 --> 01:10:07,300 আমরা আসলে এটা একসঙ্গে কাজ করতে পারেন, কারণ এই সত্যিই ছোট হতে যাচ্ছে. 904 01:10:07,300 --> 01:10:11,510 >> না কি আমার বেস ক্ষেত্রে চালু করা? 905 01:10:11,510 --> 01:10:13,890 [ছাত্র, অপাচ্য] 906 01:10:13,890 --> 01:10:18,230 [Bowden] সুতরাং যদি (ট্রি == NULL), তারপর কি? 907 01:10:18,230 --> 01:10:22,740 [ছাত্র] মিথ্যা ফিরুন. 908 01:10:22,740 --> 01:10:26,160 [Bowden] কিছুতে, ভাল, আমি অন্য কোন প্রয়োজন নেই. 909 01:10:26,160 --> 01:10:30,250 যদি আমার অন্যান্য বেস কেস. 910 01:10:30,250 --> 01:10:32,450 [ছাত্র] বৃক্ষ এর মান? >> হ্যাঁ. 911 01:10:32,450 --> 01:10:36,430 তাই আপনি যদি (ট্রি> মান == মান. 912 01:10:36,430 --> 01:10:39,920 উল্লেখ্য, আমরা নোড * যাও ফিরে এসেছি নোড ** গুলি, না? 913 01:10:39,920 --> 01:10:42,990 ধারণকারী একটি নোড ** ব্যবহার করতে হবে না হবে, 914 01:10:42,990 --> 01:10:45,480 যেহেতু আমরা পয়েন্টার পরিবর্তন হয় না. 915 01:10:45,480 --> 01:10:50,540 আমরা ঠিক করছি তাদের ঘোরা. 916 01:10:50,540 --> 01:10:53,830 যদি এমন ঘটে তাহলে, আমরা সত্য ফেরত চান. 917 01:10:53,830 --> 01:10:58,270 অন্যথায় আমরা শিশুদের তর্ক করতে চান. 918 01:10:58,270 --> 01:11:02,620 সুতরাং আমরা কিনা বাম সবকিছু কম সম্পর্কে REASON করতে পারবেন না 919 01:11:02,620 --> 01:11:05,390 এবং ডান সব থেকে বড়. 920 01:11:05,390 --> 01:11:09,590 তাই আমাদের অবস্থা এখানে হবে - অথবা, আমরা কি করতে যাচ্ছি যাও না? 921 01:11:09,590 --> 01:11:11,840 [ছাত্র, অপাচ্য] >> হ্যাঁ. 922 01:11:11,840 --> 01:11:17,400 ফিরে রয়েছে (মান, গাছ> বাম) 923 01:11:17,400 --> 01:11:26,860 অথবা রয়েছে (মান, গাছ-> ডানে). এবং যে এটি. 924 01:11:26,860 --> 01:11:29,080 এবং বিজ্ঞপ্তি কিছু শর্ট - সার্কিট ঘটানো মূল্যায়ন আছে, 925 01:11:29,080 --> 01:11:32,520 যেখানে আমরা যদি বাম গাছ মান খুঁজে এরকম, 926 01:11:32,520 --> 01:11:36,820 এ মুহূর্তে আমরা গাছ তাকান করার প্রয়োজন নেই. 927 01:11:36,820 --> 01:11:40,430 এটা সমগ্র ফাংশন. 928 01:11:40,430 --> 01:11:43,690 এখন এর এটি iteratively না যাক, 929 01:11:43,690 --> 01:11:48,060 যা কম সুন্দর হবে. 930 01:11:48,060 --> 01:11:54,750 আমরা নোড * নেড়িকুত্তা = গাছ স্বাভাবিক শুরু নেব. 931 01:11:54,750 --> 01:12:03,250 যদিও (বর্তমান! = শূন্য). 932 01:12:03,250 --> 01:12:08,600 দ্রুত একটা সমস্যা দেখতে যাচ্ছে. 933 01:12:08,600 --> 01:12:12,250 যদি বর্তমান - আউট এখানে, যদি আমরা এই আউট বিরতি, 934 01:12:12,250 --> 01:12:16,020 তারপর আমরা জিনিস রান আউট করেছি তাকান, তাই মিথ্যা ফিরে. 935 01:12:16,020 --> 01:12:24,810 যদি (বর্তমান-> মান == মান), সত্য ফিরে. 936 01:12:24,810 --> 01:12:32,910 সুতরাং এখন, আমরা একটি জায়গা আছে - 937 01:12:32,910 --> 01:12:36,250 আমরা কিনা আমরা বাম বা ডান যেতে চান না. 938 01:12:36,250 --> 01:12:44,590 সুতরাং ইচ্ছামত, যাক এর ঠিক বামে যান. 939 01:12:44,590 --> 01:12:47,910 আমি একটি বিষয় যেখানে সম্পূর্ণ আমি সবকিছু করেছি পরিত্যক্ত মধ্যে সুস্পষ্টরূপে করেছি রান - 940 01:12:47,910 --> 01:12:50,760 আমি কখনো শুধুমাত্র একটি গাছ বামদিকে চেক করবে. 941 01:12:50,760 --> 01:12:56,050 আমি কিছু যা কিছু অধিকার সন্তানের চেক করবে না. 942 01:12:56,050 --> 01:13:00,910 আমি কিভাবে এই ঠিক করব? 943 01:13:00,910 --> 01:13:05,260 [ছাত্র] আপনি একটি স্ট্যাকের মধ্যে বাম এবং ডান ট্র্যাক রাখা আছে. 944 01:13:05,260 --> 01:13:13,710 [Bowden] হ্যাঁ. সুতরাং এর করা যাক 945 01:13:13,710 --> 01:13:32,360 struct তালিকা, নোড * হবে, এবং তারপর নোড ** পরের? 946 01:13:32,360 --> 01:13:40,240 আমি মনে করি যে কাজ করে জরিমানা. 947 01:13:40,240 --> 01:13:45,940 এখানে - আমরা বাম, বা let's যেতে চান উপর. 948 01:13:45,940 --> 01:13:54,350 Struct তালিকা তালিকা =, এটি শুরু করব 949 01:13:54,350 --> 01:13:58,170 আউট এই struct তালিকা. 950 01:13:58,170 --> 01:14:04,040 * তালিকা = শূন্য. যাতে আমাদের তালিকা সংযুক্ত হতে যাচ্ছে 951 01:14:04,040 --> 01:14:08,430 এর subtrees যে আমরা উপর এড়ানো আছে. 952 01:14:08,430 --> 01:14:13,800 আমরা উতরান এখন বাকি যাচ্ছে, 953 01:14:13,800 --> 01:14:17,870 কিন্তু যেহেতু আমরা অবশ্যম্ভাবীরূপে অধিকার ফিরে আসা প্রয়োজন, 954 01:14:17,870 --> 01:14:26,140 আমরা আমাদের struct তালিকা ভিতরে ডানদিকে রাখা চলুন. 955 01:14:26,140 --> 01:14:32,620 তারপর আমরা new_list বা struct করতে হবে, 956 01:14:32,620 --> 01:14:41,080 struct তালিকা *, new_list = malloc (sizeof (তালিকা)). 957 01:14:41,080 --> 01:14:44,920 আমি ত্রুটি পরীক্ষা যে উপেক্ষা করা যাচ্ছে, কিন্তু করছি আপনি যদি এটি এর নাল দেখুন উচিত. 958 01:14:44,920 --> 01:14:50,540 নোডের মধ্যে এটি নির্দেশ করে যাচ্ছে New_list - 959 01:14:50,540 --> 01:14:56,890 উহু, সে জন্যই আমি এটা চেয়েছিলেন এখানে. এটি একটি দ্বিতীয় struct তালিকা নির্দেশ করে যাচ্ছে. 960 01:14:56,890 --> 01:15:02,380 এটা ঠিক কিভাবে কাজ তালিকা লিঙ্ক. 961 01:15:02,380 --> 01:15:04,810 এটি কোন int লিঙ্ক তালিকা হিসাবে একই 962 01:15:04,810 --> 01:15:06,960 ছাড়া আমরা নোড * সঙ্গে int-প্রতিস্থাপন করছেন. 963 01:15:06,960 --> 01:15:11,040 এটা ঠিক একই. 964 01:15:11,040 --> 01:15:15,100 সুতরাং new_list, আমাদের new_list নোড মান, 965 01:15:15,100 --> 01:15:19,120 যাও নেড়িকুত্তা> সঠিক হতে হবে. 966 01:15:19,120 --> 01:15:24,280 আমাদের মান new_list> পরের আমাদের মূল তালিকা হবে, 967 01:15:24,280 --> 01:15:30,760 এবং তারপর আমরা আমাদের তালিকা new_list নির্দেশ আপডেট চলুন. 968 01:15:30,760 --> 01:15:33,650 >> এখন আমরা কাছে জিনিস উপায় কিছু বাছাই করা প্রয়োজন, 969 01:15:33,650 --> 01:15:37,020 ভালো আমরা সমগ্র বাম subtree traversed আছে. 970 01:15:37,020 --> 01:15:40,480 এখন আমরা স্টাফ বৈঠাচালনা এটি আউট প্রয়োজন, 971 01:15:40,480 --> 01:15:43,850 ভালো নেড়িকুত্তা হয় নাল; আমরা শুধু মিথ্যা ফেরত দিতে চান না. 972 01:15:43,850 --> 01:15:50,370 আমরা এখন বাইরে আমাদের নতুন তালিকা টান মারা চাই. 973 01:15:50,370 --> 01:15:53,690 যারা এই ধরনের সুবিধাজনক উপায় - আসলে ভাল,, এই কাজ করার একাধিক উপায় আছে. 974 01:15:53,690 --> 01:15:56,680 যে কেউ পরামর্শ আছে? 975 01:15:56,680 --> 01:15:58,790 যেখানে আমি এই বা কিভাবে আমি এই কি করা উচিৎ কি করা উচিৎ? 976 01:15:58,790 --> 01:16:08,010 আমরা মাত্র কয়েক মিনিট আছে, কিন্তু কোন পরামর্শ? 977 01:16:08,010 --> 01:16:14,750 পরিবর্তে - একটা উপায়, পরিবর্তে আমাদের শর্ত হচ্ছে যখন, 978 01:16:14,750 --> 01:16:17,090 আমরা কি বর্তমানে করছি নাল নয়, 979 01:16:17,090 --> 01:16:22,340 এর পরিবর্তে আমরা যেতে অবিরত পর্যন্ত আমাদের তালিকা নিজেই নাল চলুন. 980 01:16:22,340 --> 01:16:25,680 তাই আপনি যদি আমাদের তালিকা সমাপ্ত হচ্ছে নাল, 981 01:16:25,680 --> 01:16:30,680 তারপর আমরা জিনিস ফুরিয়েছে জন্য, যাও যাও চেহারা ও অনুসন্ধান. 982 01:16:30,680 --> 01:16:39,860 কিন্তু তার মানে শুধুমাত্র আমাদের তালিকায় সর্বপ্রথম যে জিনিসটি প্রথম নোডের মধ্যে হতে হবে. 983 01:16:39,860 --> 01:16:49,730 আমরা দেখতে আর প্রয়োজন - প্রথম বিষয় হতে হবে. 984 01:16:49,730 --> 01:16:58,710 সুতরাং তালিকা> n আমাদের গাছ হতে হবে. 985 01:16:58,710 --> 01:17:02,860 তালিকা> পরের যাও নাল হবে. 986 01:17:02,860 --> 01:17:07,580 এবং এখন যখন তালিকা আছে সমান নাল না. 987 01:17:07,580 --> 01:17:11,610 বর্তমান আমাদের তালিকা থেকে কিছু উন্মুলিত করা যাচ্ছে. 988 01:17:11,610 --> 01:17:13,500 তাই সমান তালিকা> n যাও নেড়িকুত্তা যাচ্ছে. 989 01:17:13,500 --> 01:17:20,850 এবং তারপর সমান তালিকা> n তালিকা যাওয়া বা তালিকা> পরের হয়. 990 01:17:20,850 --> 01:17:23,480 তাই আপনি যদি বর্তমান মান মান সমান. 991 01:17:23,480 --> 01:17:28,790 এখন আমরা আমাদের অধিকার উভয় পয়েন্টার এবং আমাদের বাম পয়েন্টার যুক্ত করতে পারেন 992 01:17:28,790 --> 01:17:32,900 যতদিন তারা নাল পারব না. 993 01:17:32,900 --> 01:17:36,390 এখানে নিচে, আমি অনুমান আমরা যে কাজ করা উচিত প্রথমে. 994 01:17:36,390 --> 01:17:44,080 যদি (বর্তমান-> ডানে! = শূন্য) 995 01:17:44,080 --> 01:17:56,380 তারপর আমরা আমাদের মধ্যে যে তালিকা নোডের মধ্যে সন্নিবেশ করতে যাচ্ছি. 996 01:17:56,380 --> 01:17:59,290 যদি (বর্তমান-> বাম), এই একটি অতিরিক্ত কাজ অল্প, কিন্তু এটা সূক্ষ্ম. 997 01:17:59,290 --> 01:18:02,690 যদি (বর্তমান-> বাম! = শূন্য), 998 01:18:02,690 --> 01:18:14,310 এবং আমরা আমাদের লিঙ্ক তালিকায় বাম সন্নিবেশ চলুন, 999 01:18:14,310 --> 01:18:19,700 এবং এটা করা উচিত. 1000 01:18:19,700 --> 01:18:22,670 আমরা বারবার - যতদিন আমরা আমাদের তালিকার মধ্যে কিছু আছে, 1001 01:18:22,670 --> 01:18:26,640 আমরা তাকান অন্য একটি নোড আছে. 1002 01:18:26,640 --> 01:18:28,920 সুতরাং আমরা যে নোড তাকান, 1003 01:18:28,920 --> 01:18:31,390 আমরা আমাদের পরবর্তী এক তালিকা আগাম. 1004 01:18:31,390 --> 01:18:34,060 যদি যে নোড হয় মান আমরা খুঁজছেন, আমরা সত্য ফিরে আসতে পারেন. 1005 01:18:34,060 --> 01:18:37,640 অন্য উভয় আমাদের বাম এবং ডান subtrees সন্নিবেশ, 1006 01:18:37,640 --> 01:18:40,510 যতদিন তারা নাল পারব না, আমাদের মধ্যে তালিকা 1007 01:18:40,510 --> 01:18:43,120 যাতে আমরা তাদের উপর অবশ্যম্ভাবী যান. 1008 01:18:43,120 --> 01:18:45,160 সুতরাং যদি তারা, নাল না 1009 01:18:45,160 --> 01:18:47,950 যদি আমাদের রুট পয়েন্টার দুটি জিনিস জোরাল, 1010 01:18:47,950 --> 01:18:51,670 তারপর প্রথমে আমরা কিছু টানা যাতে আমাদের তালিকা সমাপ্ত হচ্ছে নাল. 1011 01:18:51,670 --> 01:18:56,890 এবং তারপর আমরা দুটি জিনিস রাখা ফিরে, তাই এখন আমাদের তালিকার মাপ 2 হয়. 1012 01:18:56,890 --> 01:19:00,030 তারপর আমরা লুপ ফিরে আপ যাচ্ছে এবং আমরা ঠিক করছি বৈঠাচালনা চলুন, 1013 01:19:00,030 --> 01:19:04,250 আসুন আমাদের রুট নোড বাম পয়েন্টার বলে,. 1014 01:19:04,250 --> 01:19:07,730 এবং শুধুমাত্র যে ঘটছে রাখা হবে; আমরা আপ সবকিছু উপর looping শেষ করব. 1015 01:19:07,730 --> 01:19:11,280 >> উল্লেখ্য, এই ছিল উল্লেখযোগ্যভাবে আরো জটিল 1016 01:19:11,280 --> 01:19:14,160 মধ্যে recursive সমাধান. 1017 01:19:14,160 --> 01:19:17,260 এবং আমি একাধিক বার বলেছেন করেছি 1018 01:19:17,260 --> 01:19:25,120 যে সাধারণত recursive সমাধান সাধারণ মধ্যে রয়েছে সমাধান পুনরাবৃত্ত সঙ্গে অনেক. 1019 01:19:25,120 --> 01:19:30,820 এখানে এটা ঠিক কি recursive সমাধান করছে. 1020 01:19:30,820 --> 01:19:36,740 শুধু পরিবর্তন আছে যা পরিবর্তে পরোক্ষভাবে স্ট্যাক ব্যবহার, প্রোগ্রাম স্ট্যাক, হয় 1021 01:19:36,740 --> 01:19:40,840 কি নোড হিসাবে আপনি এখনও যান আপনার প্রয়োজন সম্পর্কে অবগত থাকার উপায়, 1022 01:19:40,840 --> 01:19:45,430 এখন আপনি বর্ণিতভাবে যুক্ত তালিকা ব্যবহার আছে. 1023 01:19:45,430 --> 01:19:49,070 উভয় ক্ষেত্রেই আপনি অবগত থাকার হয় তখনও নোড প্রয়োজন দেখেছে. 1024 01:19:49,070 --> 01:19:51,790 এটি recursive ক্ষেত্রে শুধু সহজ কারণ একটি স্ট্যাক 1025 01:19:51,790 --> 01:19:57,100 আপনার জন্য প্রোগ্রাম স্ট্যাক হিসাবে প্রয়োগ করা হয়. 1026 01:19:57,100 --> 01:19:59,550 উল্লেখ্য, এই লিঙ্ক তালিকা, এটি একটি স্ট্যাক. 1027 01:19:59,550 --> 01:20:01,580 যাই হোক না কেন আমরা ঠিক স্ট্যাক করা 1028 01:20:01,580 --> 01:20:09,960 হয় অবিলম্বে কি আমরা স্ট্যাকের বৈঠাচালনা বন্ধ পরবর্তী যান চলুন. 1029 01:20:09,960 --> 01:20:14,380 আমাদের সময় শেষ হয়ে গেছে, কিন্তু কোন প্রশ্ন? 1030 01:20:14,380 --> 01:20:23,530 [ছাত্র, অপাচ্য] 1031 01:20:23,530 --> 01:20:27,790 [Bowden] হ্যাঁ. সুতরাং আমরা যদি আমাদের যুক্ত তালিকা আছে, 1032 01:20:27,790 --> 01:20:30,150 বর্তমান এই লোক নির্দেশ যাচ্ছে, 1033 01:20:30,150 --> 01:20:34,690 এবং এখন আমরা আমাদের যুক্ত তালিকা করছি এই লোক মনোনিবেশ আগুয়ান. 1034 01:20:34,690 --> 01:20:44,200 আমরা যে লাইন সংযুক্ত তালিকা উপর ঢোঁড়ন করছি. 1035 01:20:44,200 --> 01:20:51,200 এবং তারপর আমি অনুমান আমরা আমাদের যুক্ত তালিকা এবং স্টাফ মুক্ত উচিত 1036 01:20:51,200 --> 01:20:53,880 একবার আগে ফিরে সত্য বা মিথ্যা, আমরা প্রয়োজন 1037 01:20:53,880 --> 01:20:57,360 আমাদের সাথে লিঙ্ক তালিকা উপর বারবার করা এবং সবসময় নিচে এখানে, আমি অনুমান, 1038 01:20:57,360 --> 01:21:03,900 যদি আমরা বর্তমান অধিকার সমান নয়, এটি, যোগ, তাই এখন আমরা মুক্ত করতে চান 1039 01:21:03,900 --> 01:21:09,600 বর্তমান কারণ, ভাল, আমরা তালিকা সম্পর্কে সম্পূর্ণরূপে কি ভুলে গেলে? হাঁ. 1040 01:21:09,600 --> 01:21:12,880 তাই কি আমরা এখানে কাজ করতে চান. 1041 01:21:12,880 --> 01:21:16,730 কোথায় পয়েন্টার? 1042 01:21:16,730 --> 01:21:23,320 তারপর বর্তমান ছিল - আমরা চাই একটি struct তালিকায় * 10 তালিকা সমান পরের. 1043 01:21:23,320 --> 01:21:29,240 বিনামূল্যে তালিকা, তালিকা = temp. 1044 01:21:29,240 --> 01:21:32,820 এবং ক্ষেত্রে যেখানে আমরা ফিরে সত্য, আমরা বারবার করা প্রয়োজন 1045 01:21:32,820 --> 01:21:37,050 উপর আমাদের জিনিস যুক্ত তালিকা freeing বাকি. 1046 01:21:37,050 --> 01:21:39,700 recursive সমাধান সম্পর্কে চমৎকার জিনিস জিনিস হয় freeing 1047 01:21:39,700 --> 01:21:44,930 শুধু স্ট্যাকের যা আপনার জন্য ঘটবে বন্ধ পপিং factorings মানে. 1048 01:21:44,930 --> 01:21:50,720 তাই আমরা কিছু হার্ড দী সম্পর্কে ভাবা কোড 3 লাইনের মত যে এর থেকে চলে গেছে করেছি 1049 01:21:50,720 --> 01:21:57,520 কিছু যে হয় উল্লেখযোগ্যভাবে অনেক হার্ড দী সম্পর্কে ভাবা লাইনের কোড. 1050 01:21:57,520 --> 01:22:00,620 কোন প্রশ্ন? 1051 01:22:00,620 --> 01:22:08,760 ঠিক আছে. আমরা ভাল. বিদায়! 1052 01:22:08,760 --> 01:22:11,760 [CS50.TV]