src/HOL/Library/Tree.thy
changeset 63765 e60020520b15
parent 63755 182c111190e5
child 63770 a67397b13eb5
equal deleted inserted replaced
63764:f3ad26c4b2d9 63765:e60020520b15
   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