در این مطلب، ویدئو Serialize and Deserialize Binary Tree – Preorder Traversal – Leetcode 297 – Python با زیرنویس فارسی را برای دانلود قرار داده ام. شما میتوانید با پرداخت 15 هزار تومان ، این ویدیو به علاوه تمامی فیلم های سایت را دانلود کنید.اکثر فیلم های سایت به زبان انگلیسی می باشند. این ویدئو دارای زیرنویس فارسی ترجمه شده توسط هوش مصنوعی می باشد که میتوانید نمونه ای از آن را در قسمت پایانی این مطلب مشاهده کنید.
مدت زمان فیلم: 00:13:48
تصاویر این ویدئو:
قسمتی از زیرنویس این فیلم:
00:00:00,000 –> 00:00:01,760
سلام به همه خوش آمدید و بیایید
2
00:00:01,760 –> 00:00:03,600
امروز یک کد دقیق تر بنویسیم، بنابراین امروز
3
00:00:03,600 –> 00:00:04,319
بیایید
4
00:00:04,319 –> 00:00:07,919
یک درخت باینری را سریالی و غیر سریالی سازی
5
00:00:07,919 –> 00:00:09,440
کنیم اساساً آنچه می خواهیم انجام دهیم این است که به
6
00:00:09,440 –> 00:00:11,360
درستی یک درخت باینری به ما داده می شود و می
7
00:00:11,360 –> 00:00:13,040
خواهیم دو تابع برای آن بنویسیم و آن را
8
00:00:13,040 –> 00:00:15,599
سریال سازی کنیم. و سپس آن را از حالت
9
00:00:15,599 –> 00:00:17,920
سریال خارج می کنیم، یک شی را به
10
00:00:17,920 –> 00:00:18,960
سمت راست می گیریم و این شی
11
00:00:18,960 –> 00:00:20,480
در حافظه می تواند هر چیزی درست باشد،
12
00:00:20,480 –> 00:00:22,080
مثل اینکه شما نمی دانید این گره کجا
13
00:00:22,080 –> 00:00:22,640
می تواند
14
00:00:22,640 –> 00:00:24,240
در حافظه باشد، نمی دانید این گره کجا
15
00:00:24,240 –> 00:00:25,680
می تواند باشد، ما می دانیم که پیوندها
16
00:00:25,680 –> 00:00:27,199
و چیزهایی وجود دارد که همه آنها را به یکدیگر متصل می کند،
17
00:00:27,199 –> 00:00:27,599
اما
18
00:00:27,599 –> 00:00:29,599
کاری که ما می خواهیم انجام دهیم این است که این را برداریم و
19
00:00:29,599 –> 00:00:31,840
آن را در یک رشته بسیار خوانا قرار دهیم
20
00:00:31,840 –> 00:00:34,000
که می تواند به
21
00:00:34,000 –> 00:00:35,600
راحتی به درستی منتقل شود، بنابراین اساساً
22
00:00:35,600 –> 00:00:38,160
برای مثال می توانیم اساساً
23
00:00:38,160 –> 00:00:39,280
می توانیم
24
00:00:39,280 –> 00:00:41,520
کل این درخت را به تبدیل کنیم. یک رشته چیزی
25
00:00:41,520 –> 00:00:42,399
شبیه به این درست
26
00:00:42,399 –> 00:00:44,160
یکی گره ریشه است، سپس یک دو
27
00:00:44,160 –> 00:00:45,360
وجود دارد، سپس یک سه وجود دارد، سپس یک زوج تهی وجود دارد،
28
00:00:45,360 –> 00:00:47,280
زیرا دو نفر هیچ فرزندی ندارند
29
00:00:47,280 –> 00:00:48,079
30
00:00:48,079 –> 00:00:49,840
و سپس گره های دیگر چهار
31
00:00:49,840 –> 00:00:51,199
و پنج ریگ هستند. ht اساساً
32
00:00:51,199 –> 00:00:53,600
این چیزی است که استفاده از آن آسان است و به
33
00:00:53,600 –> 00:00:54,800
درستی عبور می کند
34
00:00:54,800 –> 00:00:57,199
و ما همچنین می خواهیم بتوانیم یک
35
00:00:57,199 –> 00:00:59,120
رشته مانند این را برداریم و سپس آن
36
00:00:59,120 –> 00:01:02,480
را به درخت تبدیل کنیم، بنابراین باید این را
37
00:01:02,480 –> 00:01:04,159
در نظر داشته باشیم که این چیزی است که می توانید
38
00:01:04,159 –> 00:01:06,000
پس بگیرید و سپس به راحتی
39
00:01:06,000 –> 00:01:08,159
برعکس می شود، بنابراین راه های
40
00:01:08,159 –> 00:01:09,680
مختلفی برای حل این مشکل وجود دارد،
41
00:01:09,680 –> 00:01:11,840
من یک راه بسیار آسان و
42
00:01:11,840 –> 00:01:13,360
ساده برای انجام آن به
43
00:01:13,360 –> 00:01:15,360
شما نشان می دهم، می توانید ابتدا از جستجوی وسعت استفاده کنید
44
00:01:15,360 –> 00:01:17,200
که اساساً درخت را بگیرید و سپس
45
00:01:17,200 –> 00:01:19,200
آن را سطح به سطح سریال کنید
46
00:01:19,200 –> 00:01:21,040
و سپس شما خواندن از طریق
47
00:01:21,040 –> 00:01:22,400
سطح ورودی بر اساس سطح
48
00:01:22,400 –> 00:01:25,439
و غیره را بدانید، اما راهی برای انجام این کار با
49
00:01:25,439 –> 00:01:26,880
جستجوی عمقی در ابتدا با استفاده
50
00:01:26,880 –> 00:01:29,439
از پیمایش پیشسفارش وجود دارد و من
51
00:01:29,439 –> 00:01:31,119
این راه را به شما نشان میدهم زیرا به
52
00:01:31,119 –> 00:01:32,400
کد کمی کمتری نیاز دارد،
53
00:01:32,400 –> 00:01:33,840
بنابراین همانطور که اشاره کردم، در حال انجام آن هستیم. برای
54
00:01:33,840 –> 00:01:35,759
انجام این کار با پیمایش پیشسفارش، پس
55
00:01:35,759 –> 00:01:36,960
بیایید
56
00:01:36,960 –> 00:01:38,880
ببینیم اگر درختی
57
00:01:38,880 –> 00:01:40,720
را به پیمایش پیشسفارش
58
00:01:40,720 –> 00:01:42,720
به شکل رشته تبدیل کنیم،
59
00:01:42,720 –> 00:01:44,560
چه چیزی شبیه به این
60
00:01:44,560 –> 00:01:46,960
است. میخوام بگو خوب،
61
00:01:46,960 –> 00:01:48,399
نت ریشه یکی درست است، به این معنی است که
62
00:01:48,399 –> 00:01:49,920
پیشسفارش به این معناست که ما اولین
63
00:01:49,920 –> 00:01:50,399
گره را
64
00:01:50,399 –> 00:01:52,880
انجام میدهیم، سپس زیردرخت سمت چپ را به صورت بازگشتی
65
00:01:52,880 –> 00:01:54,079
با
66
00:01:54,079 –> 00:01:56,399
پیمایش پیشسفارش انجام میدهیم و سپس به طور مشابه بعد از آن،
67
00:01:56,399 –> 00:01:58,079
درست را انجام میدهیم.
68
00:01:58,079 –> 00:01:59,280
69
00:01:59,280 –> 00:02:01,520
اکنون واضح است که میخواهیم
70
00:02:01,520 –> 00:02:02,960
مقادیر را از هم جدا کنیم،
71
00:02:02,960 –> 00:02:04,640
بنابراین میخواهیم از یک کاما به عنوان
72
00:02:04,640 –> 00:02:06,560
جداکننده استفاده کنیم، اما اگر واقعاً میخواهید میتوانید از یک فاصله
73
00:02:06,560 –> 00:02:07,520
74
00:02:07,520 –> 00:02:09,360
استفاده کنید یا از چیز دیگری استفاده کنید، اما من فقط از
75
00:02:09,360 –> 00:02:11,680
یک علامت استفاده میکنم کاما پس حالا بیایید به صورت بازگشتی
76
00:02:11,680 –> 00:02:13,280
همین کار را برای زیردرخت سمت چپ انجام
77
00:02:13,280 –> 00:02:14,480
دهیم، بنابراین بدیهی است که یک دو داریم،
78
00:02:14,480 –> 00:02:15,920
بیایید آن را نیز اضافه کنیم زیرا در حال انجام
79
00:02:15,920 –> 00:02:18,560
پیش سفارش هستیم و حالا بیایید زیردرخت چپ و
80
00:02:18,560 –> 00:02:20,560
راست دو را انجام دهیم، بنابراین ابتدا
81
00:02:20,560 –> 00:02:21,760
به زیر درخت سمت چپ برویم.
82
00:02:21,760 –> 00:02:24,239
حالا ما null را درست می بینیم،
83
00:02:24,239 –> 00:02:26,239
این خالی است، هیچ چیزی وجود ندارد،
84
00:02:26,239 –> 00:02:29,440
اما ما آن را به رشته خود اضافه می
85
00:02:29,440 –> 00:02:31,519
کنیم تا به ما نشان دهیم که این
86
00:02:31,519 –> 00:02:34,400
بخش سمت چپ زیردرخت را نمی توان
87
00:02:34,400 –> 00:02:35,599
به سمت راست ادامه داد و
88
00:02:35,599 –> 00:02:37,360
می توانید کلمه null را اضافه کنید اما i من
89
00:02:37,360 –> 00:02:39,040
فقط از یک حرف بزرگ n برای
90
00:02:39,040 –> 00:02:40,480
نشان دادن استفاده می کنم این مقدار خاص ما خواهد بود
91
00:02:40,480 –> 00:02:42,319
که نشاندهنده یک
92
00:02:42,319 –> 00:02:45,599
گره خالی یا درخت خالی است، زیرا
93
00:02:45,599 –> 00:02:47,760
کل زیردرخت سمت چپ را تمام کردیم و
94
00:02:47,760 –> 00:02:49,680
میدانیم که این یک سمت راست تهی بود، بنابراین
95
00:02:49,680 –> 00:02:51,280
اساساً مورد اصلی ما است که به ما میگوید
96
00:02:51,280 –> 00:02:53,280
نمیتوانیم به هیچیک برویم. در اینجا دورتر، بنابراین اکنون
97
00:02:53,280 –> 00:02:55,760
زیردرخت سمت راست ما برای دو نفر چیست، آن نیز
98
00:02:55,760 –> 00:02:58,319
تهی است، بنابراین ما میخواهیم یک null دیگر اضافه کنیم
99
00:02:58,319 –> 00:03:00,319
و ببینیم که چگونه کل زیردرخت سمت چپ را در اینجا انجام دادهایم،
100
00:03:00,319 –> 00:03:01,440
101
00:03:01,440 –> 00:03:04,080
بنابراین اکنون میتوانیم شروع به پایین رفتن از زیر درخت سمت راست کنیم،
102
00:03:04,080 –> 00:03:05,040
103
00:03:05,040 –> 00:03:07,280
بنابراین البته مقدار اول یک سه است،
104
00:03:07,280 –> 00:03:09,040
پس بیایید جلوتر برویم و اضافه
105
00:03:09,040 –> 00:03:10,480
کنیم و به طور مشابه
106
00:03:10,480 –> 00:03:12,159
، پیمایش پیشسفارش را در زیر درخت سمت چپ انجام
107
00:03:12,159 –> 00:03:13,360
میدهیم، اکنون میتوانید اساساً ببینید
108
00:03:13,360 –> 00:03:15,760
که این دقیقاً همان کاری است که ما در اینجا انجام دادیم،
109
00:03:15,760 –> 00:03:16,560
سمت راست
110
00:03:16,560 –> 00:03:19,920
2 یک گره بود و دو تا داشتند. هیچ فرزندی بنابراین
111
00:03:19,920 –> 00:03:21,680
فرزند چپ و راست دو نفر تهی
112
00:03:21,680 –> 00:03:23,120
نبود، این همان چیزی است که برای این چهار گره صادق است،
113
00:03:23,120 –> 00:03:24,319
بنابراین ما
114
00:03:24,319 –> 00:03:26,239
چهار را اضافه می کنیم و سپس دو گره تهی را اضافه می کنیم که
115
00:03:26,239 –> 00:03:28,400
اساساً نشان می دهد که
116
00:03:28,400 –> 00:03:28,879
چهار
117
00:03:28,879 –> 00:03:32,000
فرزند n
118
00:03:32,000 –> 00:03:34,720
n ندارد بنابراین اکنون بیایید برویم زیردرخت درست را انجام دهیم
119
00:03:34,720 –> 00:03:35,519
120
00:03:35,519 –> 00:03:36,720
احتمالاً میتوانم بگویم
121
00:03:36,720 –> 00:03:38,159
اینجا چه کار میکنم، بنابراین فضای خالی من تمام میشود، بنابراین
122
00:03:38,159 –> 00:03:39,760
بیایید 5 تا را در اینجا
123
00:03:39,760 –> 00:03:43,599
کاما و سپس چند گره تهی خالی
124
00:03:43,599 –> 00:03:45,360
بگذاریم و اکنون درست تمام رشتهها را انجام میدهیم،
125
00:03:45,360 –> 00:03:46,640
126
00:03:46,640 –> 00:03:49,040
بنابراین حالا من من از شر این درخت خلاص
127
00:03:49,040 –> 00:03:49,920
میشویم و میخواهیم
128
00:03:49,920 –> 00:03:52,400
ببینیم آیا حتی ممکن است
129
00:03:52,400 –> 00:03:53,760
بتوانیم رشتهای مانند این را بگیریم
130
00:03:53,760 –> 00:03:55,680
و دقیقاً بدانیم که کدام یک
131
00:03:55,680 –> 00:03:56,879
گره چپ و کدام
132
00:03:56,879 –> 00:03:58,959
سمت راست است. و غیره درست است، ما
133
00:03:58,959 –> 00:04:00,080
بدیهی است که از
134
00:04:00,080 –> 00:04:02,560
پیمایش پیشسفارش در این رشته
135
00:04:02,560 –> 00:04:03,360
136
00:04:03,360 –> 00:04:06,239
برای ایجاد یک درخت جدید استفاده میکنیم و من به
137
00:04:06,239 –> 00:04:07,519
شما نشان میدهم که
138
00:04:07,519 –> 00:04:09,519
ممکن است این رشته در واقع
139
00:04:09,519 –> 00:04:10,720
مبهم نباشد،
140
00:04:10,720 –> 00:04:12,319
زیرا به وضوح میتوانید آن را ببینید.
141
00:04:12,319 –> 00:04:14,000
نت ریشه خواهد بود، سپس مقدار بعدی
142
00:04:14,000 –> 00:04:16,639
باید سمت چپ باشد اگر این یک عدد
143
00:04:16,639 –> 00:04:17,120
تهی
144
00:04:17,120 –> 00:04:19,120
بود، به این معنی که یک زیردرخت چپ سمت
145
00:04:19,120 –> 00:04:20,959
راست ندارد، بنابراین ما میتوانیم فقط
146
00:04:20,959 –> 00:04:22,880
برای زیردرخت چپ آن null قرار دهیم، اما واضح
147
00:04:22,880 –> 00:04:24,240
است که این تهی نیست،
148
00:04:24,240 –> 00:04:26,960
بنابراین به معنای دو است. فرزند سمت چپ
149
00:04:26,960 –> 00:04:27,600
یکی
150
00:04:27,600 –> 00:04:30,479
بعدی است ما می بینیم خوب بیایید
151
00:04:30,479 –> 00:04:31,440
زیردرخت را برای
152
00:04:31,440 –> 00:04:34,080
دو ریگ ایجاد کنیم ht خوب، فرزند سمت چپ تهی است
153
00:04:34,080 –> 00:04:36,080
و فرزند بعدی سمت راست نیز
154
00:04:36,080 –> 00:04:38,160
تهی است، بنابراین دو مورد
155
00:04:38,160 –> 00:04:39,360
هیچ چیز درستی ندارند،
156
00:04:39,360 –> 00:04:41,280
بنابراین اساساً ایده این است، بنابراین اکنون اجازه دهید این
157
00:04:41,280 –> 00:04:42,960
کار را درست انجام دهیم زیرا میدانیم
158
00:04:42,960 –> 00:04:44,479
که رشته را با
159
00:04:44,479 –> 00:04:46,000
پیمایش پیشسفارش ایجاد کردهایم. اساساً ایده
160
00:04:46,000 –> 00:04:46,880
ای که قرار است از آن استفاده کنیم، بنابراین
161
00:04:46,880 –> 00:04:48,000
ما یک اشاره گر
162
00:04:48,000 –> 00:04:49,440
خواهیم داشت که آن را می نامیم.
163
00:04:49,440 –> 00:04:51,600
164
00:04:51,600 –> 00:04:53,680
165
00:04:53,680 –> 00:04:54,880
ما در
166
00:04:54,880 –> 00:04:56,000
واقع این رشته را می گیریم
167
00:04:56,000 –> 00:04:58,639
و سپس آن را بر اساس کاما جداکننده تقسیم می کنیم،
168
00:04:58,639 –> 00:05:00,240
بنابراین در واقع
169
00:05:00,240 –> 00:05:02,240
یک آرایه خواهد بود، اما من آن را دوباره ترسیم نمی
170
00:05:02,240 –> 00:05:03,360
کنم فقط به
171
00:05:03,360 –> 00:05:04,560
این دلیل که کاملاً ساده است که
172
00:05:04,560 –> 00:05:06,400
ما با آن چه کار می کنیم این رشته
173
00:05:06,400 –> 00:05:09,440
بنابراین اولی غیر تهی است، بنابراین یک
174
00:05:09,440 –> 00:05:10,000
سمت راست است، بنابراین ما
175
00:05:10,000 –> 00:05:12,160
می خواهیم یک گره ریشه با
176
00:05:12,160 –> 00:05:13,600
مقدار یک
177
00:05:13,600 –> 00:05:15,520
ایجاد کنیم، حالا بیایید درخت فرعی سمت چپ
178
00:05:15,520 –> 00:05:17,039
را شبیه پیمایش پیش سفارش درست
179
00:05:17,039 –> 00:05:18,479
کنیم، اکنون گره را ایجاد می کنیم، سپس می خواهیم
180
00:05:18,479 –> 00:05:19,680
می خواهیم زیردرخت سمت چپ
181
00:05:19,680 –> 00:05:21,360
را انجام دهیم سپس ریگ را انجام می دهیم ht subtree سوالی
182
00:05:21,360 –> 00:05:22,400
که ممکن است برای شما پیش بیاید این است
183
00:05:22,400 –> 00:05:25,360
که چگونه بفهمیم که درخت فرعی سمت چپ چه زمانی
184
00:05:25,360 –> 00:05:26,080
متوقف می شود
185
00:05:26,080 –> 00:05:29,199
و چه زمانی زیر درخت فرعی سمت راست شروع می شود،
186
00:05:29,199 –> 00:05:30,800
من به شما نشان خواهم داد که در واقع
187
00:05:30,800 –> 00:05:32,479
ساده تر از آن چیزی است که شما فکر می کنید،
188
00:05:32,479 –> 00:05:34,639
بنابراین ما بدانیم که اولین مقدار در اینجا
189
00:05:34,639 –> 00:05:36,240
می رود. برای اینکه فرزند سمت چپ
190
00:05:36,240 –> 00:05:38,720
باشد اگر تهی بود، یک عدد
191
00:05:38,720 –> 00:05:40,880
تهی در اینجا قرار میدادیم، اما تهی نیست.
192
00:05:40,880 –> 00:05:42,160
193
00:05:42,160 –> 00:05:44,800
194
00:05:44,800 –> 00:05:46,400
195
00:05:46,400 –> 00:05:48,800
196
00:05:48,800 –> 00:05:50,400
197
00:05:50,400 –> 00:05:51,360
زیردرخت سمت چپ،
198
00:05:51,360 –> 00:05:54,400
تهی است، بنابراین از آنجایی که تهی است، به این
199
00:05:54,400 –> 00:05:56,319
معنی است که دیگر نمیتوانیم
200
00:05:56,319 –> 00:05:59,199
این زیردرخت را به سمت راست ادامه دهیم، بنابراین
201
00:05:59,199 –> 00:06:00,240
هر مقداری که باشد،
202
00:06:00,240 –> 00:06:02,400
پس با اولین تهی کار را تمام کردهایم، حالا
203
00:06:02,400 –> 00:06:03,680
هر مقداری که
204
00:06:03,680 –> 00:06:06,000
بعداً اینجا بیاید، مقدار آن خواهد بود.
205
00:06:06,000 –> 00:06:07,280
درخت فرعی سمت راست
206
00:06:07,280 –> 00:06:10,400
این دو گره نیز
207
00:06:10,400 –> 00:06:12,240
تهی است، اما شاید اگر ناشناخته نبود،
208
00:06:12,240 –> 00:06:13,840
شاید می توانست سه سمت راست باشد، در
209
00:06:13,840 –> 00:06:15,919
این زمان است که ما سه را در اینجا قرار می دادیم،
210
00:06:15,919 –> 00:06:18,479
اما واضح است که این یک تهی نیست، به این
211
00:06:18,479 –> 00:06:18,960
معنی
212
00:06:18,960 –> 00:06:22,080
که در واقع می توانیم متوقف کردن این زیردرخت
213
00:06:22,080 –> 00:06:24,639
a بنابراین از آنجایی که هر دو فرزند
214
00:06:24,639 –> 00:06:25,360
تهی بودند، به
215
00:06:25,360 –> 00:06:27,840
این معنی است که ما در واقع ایجاد
216
00:06:27,840 –> 00:06:30,000
کل این زیردرخت را به پایان
217
00:06:30,000 –> 00:06:32,800
رساندیم، اساساً به حالت پایه خود
218
00:06:32,800 –> 00:06:33,600
رسیدیم، بنابراین ما با این کار تمام کردیم،
219
00:06:33,600 –> 00:06:35,759
اکنون مقدار بعدی که در رشته ما می آید
220
00:06:35,759 –> 00:06:38,160
به وضوح درست خواهد بود.
221
00:06:38,160 –> 00:06:41,280
فرزند یک، بنابراین سه در اینجا
222
00:06:41,280 –> 00:06:42,000
فرزند مناسب خواهد بود
223
00:06:42,000 –> 00:06:44,639
و اکنون البته پیمایش پیشسفارش،
224
00:06:44,639 –> 00:06:46,080
ما زیردرخت سمت چپ سه را پر میکنیم،
225
00:06:46,080 –> 00:06:47,680
بنابراین مقدار بعدی
226
00:06:47,680 –> 00:06:48,080
227
00:06:48,080 –> 00:06:50,880
در رشته ما چهار است، بنابراین
228
00:06:50,880 –> 00:06:52,160
این یک زیردرخت سمت چپ دارد.
229
00:06:52,160 –> 00:06:54,160
چهار به طور مداوم
230
00:06:54,160 –> 00:06:56,240
زیردرخت سمت چپ چهار را انجام می
231
00:06:56,240 –> 00:06:5