equal
deleted
inserted
replaced
267 |
267 |
268 fun inorder :: "'a tree \<Rightarrow> 'a list" where |
268 fun inorder :: "'a tree \<Rightarrow> 'a list" where |
269 "inorder \<langle>\<rangle> = []" | |
269 "inorder \<langle>\<rangle> = []" | |
270 "inorder \<langle>l, x, r\<rangle> = inorder l @ [x] @ inorder r" |
270 "inorder \<langle>l, x, r\<rangle> = inorder l @ [x] @ inorder r" |
271 |
271 |
|
272 text\<open>A linear version avoiding append:\<close> |
|
273 fun inorder2 :: "'a tree \<Rightarrow> 'a list \<Rightarrow> 'a list" where |
|
274 "inorder2 \<langle>\<rangle> xs = xs" | |
|
275 "inorder2 \<langle>l, x, r\<rangle> xs = inorder2 l (x # inorder2 r xs)" |
|
276 |
|
277 |
272 lemma set_inorder[simp]: "set (inorder t) = set_tree t" |
278 lemma set_inorder[simp]: "set (inorder t) = set_tree t" |
273 by (induction t) auto |
279 by (induction t) auto |
274 |
280 |
275 lemma set_preorder[simp]: "set (preorder t) = set_tree t" |
281 lemma set_preorder[simp]: "set (preorder t) = set_tree t" |
276 by (induction t) auto |
282 by (induction t) auto |
284 lemma preorder_map: "preorder (map_tree f t) = map f (preorder t)" |
290 lemma preorder_map: "preorder (map_tree f t) = map f (preorder t)" |
285 by (induction t) auto |
291 by (induction t) auto |
286 |
292 |
287 lemma inorder_map: "inorder (map_tree f t) = map f (inorder t)" |
293 lemma inorder_map: "inorder (map_tree f t) = map f (inorder t)" |
288 by (induction t) auto |
294 by (induction t) auto |
|
295 |
|
296 lemma inorder2_inorder: "inorder2 t xs = inorder t @ xs" |
|
297 by (induction t arbitrary: xs) auto |
289 |
298 |
290 |
299 |
291 subsection \<open>Binary Search Tree predicate\<close> |
300 subsection \<open>Binary Search Tree predicate\<close> |
292 |
301 |
293 fun (in linorder) bst :: "'a tree \<Rightarrow> bool" where |
302 fun (in linorder) bst :: "'a tree \<Rightarrow> bool" where |