How to add the nodes of a tree in a list?
I want to add the nodes of a tree to a list in preorder without concatenating lists.
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t ;;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
As you can see I know how to add the nodes from a branch (left or right) but I do not know how to add the nodes from both branches. Can you help me out?
UPDATE
I think I managed to do it
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t ;;
Is it right?
tree ocaml
add a comment |
I want to add the nodes of a tree to a list in preorder without concatenating lists.
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t ;;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
As you can see I know how to add the nodes from a branch (left or right) but I do not know how to add the nodes from both branches. Can you help me out?
UPDATE
I think I managed to do it
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t ;;
Is it right?
tree ocaml
add a comment |
I want to add the nodes of a tree to a list in preorder without concatenating lists.
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t ;;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
As you can see I know how to add the nodes from a branch (left or right) but I do not know how to add the nodes from both branches. Can you help me out?
UPDATE
I think I managed to do it
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t ;;
Is it right?
tree ocaml
I want to add the nodes of a tree to a list in preorder without concatenating lists.
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t ;;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
As you can see I know how to add the nodes from a branch (left or right) but I do not know how to add the nodes from both branches. Can you help me out?
UPDATE
I think I managed to do it
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t ;;
Is it right?
tree ocaml
tree ocaml
edited Nov 12 at 10:56
asked Nov 12 at 9:10
Ghost
1346
1346
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You probably want to compute countpree
over right
after having computed it over left
.
A local binding of the computation over the left part could help.
Something like
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using::
.
– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53258935%2fhow-to-add-the-nodes-of-a-tree-in-a-list%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You probably want to compute countpree
over right
after having computed it over left
.
A local binding of the computation over the left part could help.
Something like
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using::
.
– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
add a comment |
You probably want to compute countpree
over right
after having computed it over left
.
A local binding of the computation over the left part could help.
Something like
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using::
.
– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
add a comment |
You probably want to compute countpree
over right
after having computed it over left
.
A local binding of the computation over the left part could help.
Something like
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
You probably want to compute countpree
over right
after having computed it over left
.
A local binding of the computation over the left part could help.
Something like
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
answered Nov 12 at 9:34
Julien
3527
3527
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using::
.
– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
add a comment |
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using::
.
– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
I get an error: "Error: This expression has type 'a list but an expression was expected of type 'a The type variable 'a occurs inside 'a list".
– Ghost
Nov 12 at 9:45
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using
::
.– Julien
Nov 12 at 10:53
without your code, I can't help you much. My guess is that you are trying to insert the resulting list into a list using
::
.– Julien
Nov 12 at 10:53
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
I think I managed to do it. I will update.
– Ghost
Nov 12 at 10:54
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53258935%2fhow-to-add-the-nodes-of-a-tree-in-a-list%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown