GeezerVison is showing github.com — 二叉树遍历 · SinceraXY/Algorithm_code@777a96c
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: .gitignore +1Lines changed: 1 addition & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 3 | 3 | Thumbs.db | 4 | 4 | .idea/ | 5 | 5 | .vscode/ | | 6 | +.kiro/ | 6 | 7 | *.code-workspace | 7 | 8 |
| 8 | 9 | # Python | |
Collapse file Copy file name to clipboard +92Lines changed: 92 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +/** | | 2 | + * Definition for a binary tree node. | | 3 | + * struct TreeNode { | | 4 | + * int val; | | 5 | + * TreeNode *left; | | 6 | + * TreeNode *right; | | 7 | + * TreeNode() : val(0), left(nullptr), right(nullptr) {} | | 8 | + * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} | | 9 | + * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} | | 10 | + * }; | | 11 | + */ | | 12 | + | | 13 | +//递归 | | 14 | +class Solution { | | 15 | +public: | | 16 | + void preorder(TreeNode *root, vector<int> &res) { | | 17 | + if(root==nullptr){ | | 18 | + return; | | 19 | + } | | 20 | + res.push_back(root->val); | | 21 | + preorder(root->left, res); | | 22 | + preorder(root->right,res); | | 23 | + } | | 24 | + vector<int> preorderTraversal(TreeNode* root) { | | 25 | + vector<int> res; | | 26 | + preorder(root, res); | | 27 | + return res; | | 28 | + } | | 29 | +}; | | 30 | + | | 31 | + | | 32 | + | | 33 | +//迭代 | | 34 | +class Solution { | | 35 | +public: | | 36 | + vector<int> preorderTraversal(TreeNode* root) { | | 37 | + vector<int> res; | | 38 | + if(root == nullptr){ | | 39 | + return res; | | 40 | + } | | 41 | + | | 42 | + stack<TreeNode*> stk; | | 43 | + TreeNode* node = root; | | 44 | + while(!stk.empty()||node!=nullptr) { | | 45 | + while(node!=nullptr) { | | 46 | + res.emplace_back(node->val); | | 47 | + stk.emplace(node); | | 48 | + node=node->left; | | 49 | + } | | 50 | + node=stk.top(); | | 51 | + stk.pop(); | | 52 | + node=node->right; | | 53 | + } | | 54 | + return res; | | 55 | + } | | 56 | +}; | | 57 | + | | 58 | + | | 59 | + | | 60 | +//Morris遍历 | | 61 | +class Solution { | | 62 | +public: | | 63 | + vector<int> preorderTraversal(TreeNode *root) { | | 64 | + vector<int> res; | | 65 | + if (root == nullptr) { | | 66 | + return res; | | 67 | + } | | 68 | + | | 69 | + TreeNode *p1 = root, *p2 = nullptr; | | 70 | + | | 71 | + while (p1 != nullptr) { | | 72 | + p2 = p1->left; | | 73 | + if (p2 != nullptr) { | | 74 | + while (p2->right != nullptr && p2->right != p1) { | | 75 | + p2 = p2->right; | | 76 | + } | | 77 | + if (p2->right == nullptr) { | | 78 | + res.emplace_back(p1->val); | | 79 | + p2->right = p1; | | 80 | + p1 = p1->left; | | 81 | + continue; | | 82 | + } else { | | 83 | + p2->right = nullptr; | | 84 | + } | | 85 | + } else { | | 86 | + res.emplace_back(p1->val); | | 87 | + } | | 88 | + p1 = p1->right; | | 89 | + } | | 90 | + return res; | | 91 | + } | | 92 | +}; |
Collapse file Copy file name to clipboard +70Lines changed: 70 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +/** | | 2 | + * Definition for a binary tree node. | | 3 | + * type TreeNode struct { | | 4 | + * Val int | | 5 | + * Left *TreeNode | | 6 | + * Right *TreeNode | | 7 | + * } | | 8 | + */ | | 9 | + | | 10 | +//递归 | | 11 | +func preorderTraversal(root *TreeNode) []int { | | 12 | + vals := []int{} | | 13 | + var preorder func(*TreeNode) | | 14 | + preorder = func(node *TreeNode) { | | 15 | + if node == nil { | | 16 | + return | | 17 | + } | | 18 | + vals = append(vals, node.Val) | | 19 | + preorder(node.Left) | | 20 | + preorder(node.Right) | | 21 | + } | | 22 | + preorder(root) | | 23 | + return vals | | 24 | +} | | 25 | + | | 26 | + | | 27 | + | | 28 | +//迭代 | | 29 | +func preorderTraversal(root *TreeNode) []int { | | 30 | + vals := []int{} | | 31 | + stack := []*TreeNode{} | | 32 | + node := root | | 33 | + for node != nil || len(stack) > 0 { | | 34 | + for node != nil { | | 35 | + vals = append(vals, node.Val) | | 36 | + stack = append(stack, node) | | 37 | + node = node.Left | | 38 | + } | | 39 | + node = stack[len(stack)-1].Right | | 40 | + stack = stack[:len(stack)-1] | | 41 | + } | | 42 | + return vals | | 43 | +} | | 44 | + | | 45 | + | | 46 | + | | 47 | +//Morris遍历 | | 48 | +func preorderTraversal(root *TreeNode) []int { | | 49 | + vals := []int{} | | 50 | + var p1, p2 *TreeNode = root, nil | | 51 | + for p1 != nil { | | 52 | + p2 = p1.Left | | 53 | + if p2 != nil { | | 54 | + for p2.Right != nil && p2.Right != p1 { | | 55 | + p2 = p2.Right | | 56 | + } | | 57 | + if p2.Right == nil { | | 58 | + vals = append(vals, p1.Val) | | 59 | + p2.Right = p1 | | 60 | + p1 = p1.Left | | 61 | + continue | | 62 | + } | | 63 | + p2.Right = nil | | 64 | + } else { | | 65 | + vals = append(vals, p1.Val) | | 66 | + } | | 67 | + p1 = p1.Right | | 68 | + } | | 69 | + return vals | | 70 | +} |
Collapse file Copy file name to clipboard +68Lines changed: 68 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| | 1 | +# Definition for a binary tree node. | | 2 | +# class TreeNode: | | 3 | +# def __init__(self, val=0, left=None, right=None): | | 4 | +# self.val = val | | 5 | +# self.left = left | | 6 | +# self.right = right | | 7 | + | | 8 | +#递归 | | 9 | +class Solution: | | 10 | + def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: | | 11 | + def preorder(root: TreeNode): | | 12 | + if not root: | | 13 | + return | | 14 | + res.append(root.val) | | 15 | + preorder(root.left) | | 16 | + preorder(root.right) | | 17 | + | | 18 | + res = list() | | 19 | + preorder(root) | | 20 | + return res | | 21 | + | | 22 | + | | 23 | + | | 24 | +#迭代 | | 25 | +class Solution: | | 26 | + def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: | | 27 | + res = list() | | 28 | + if not root: | | 29 | + return res | | 30 | + | | 31 | + stack = [] | | 32 | + node = root | | 33 | + while stack or node: | | 34 | + while node: | | 35 | + res.append(node.val) | | 36 | + stack.append(node) | | 37 | + node = node.left | | 38 | + node = stack.pop() | | 39 | + node = node.right | | 40 | + return res | | 41 | + | | 42 | + | | 43 | + | | 44 | +#Morris遍历 | | 45 | +class Solution: | | 46 | + def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]: | | 47 | + res = list() | | 48 | + if not root: | | 49 | + return res | | 50 | + | | 51 | + p1 = root | | 52 | + while p1: | | 53 | + p2 = p1.left | | 54 | + if p2: | | 55 | + while p2.right and p2.right != p1: | | 56 | + p2 = p2.right | | 57 | + if not p2.right: | | 58 | + res.append(p1.val) | | 59 | + p2.right = p1 | | 60 | + p1 = p1.left | | 61 | + continue | | 62 | + else: | | 63 | + p2.right = None | | 64 | + else: | | 65 | + res.append(p1.val) | | 66 | + p1 = p1.right | | 67 | + | | 68 | + return res |
|