二叉树的遍历

先序遍历(Preorder Traversal)
根-左-右
1. 递归
Java
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public List<Integer> preorderTraversal(TreeNode root) {
12         List<Integer> result = new ArrayList<Integer>();
13         if (root != null) {
14             result.add(root.val);
15             result.addAll(preorderTraversal(root.left));
16             result.addAll(preorderTraversal(root.right));
17         }
18         return result;
19     }
20 }// 1 ms

Python

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution(object):
 9     def preorderTraversal(self, root):
10         """
11         :type root: TreeNode
12         :rtype: List[int]
13         """
14         if root == None:
15             return []
16         return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right) 
2. 栈-迭代(入栈时记录值)
 Java
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public List<Integer> preorderTraversal(TreeNode root) {
12         List<Integer> result = new ArrayList<Integer>();
13         Stack<TreeNode> stack = new Stack<TreeNode>();
14         while(root != null || !stack.empty()) {
15             if(root != null) {
16                 result.add(root.val);
17                 stack.add(root);
18                 root = root.left;
19             } else {
20                 root = stack.pop().right;
21             }
22         }
23         return result;
24     }
25 }// 2 ms

Python

 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution(object):
 9     def preorderTraversal(self, root):
10         """
11         :type root: TreeNode
12         :rtype: List[int]
13         """
14         stack, result =[], []
15         while stack or root:
16             if root:
17                 stack.append(root)
18                 result.append(root.val)
19                 root = root.left
20             else:
21                 root = stack.pop().right
22         return result

 

中序遍历(Inorder Traversal)
左-根-右
1. 递归
Java
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public List<Integer> inorderTraversal(TreeNode root) {
12         List<Integer> result = new ArrayList<Integer>();
13         if(root != null) {
14             result.addAll(inorderTraversal(root.left));
15             result.add(root.val);
16             result.addAll(inorderTraversal(root.right));
17         }
18         return result;
19     }
20 }// 1 ms
Python
 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution(object):
 9     def inorderTraversal(self, root):
10         """
11         :type root: TreeNode
12         :rtype: List[int]
13         """
14         if root == None:
15             return []
16         return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)
2. 栈-迭代(出栈时记录值)
Java
 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     int val;
 5  *     TreeNode left;
 6  *     TreeNode right;
 7  *     TreeNode(int x) { val = x; }
 8  * }
 9  */
10 class Solution {
11     public List<Integer> inorderTraversal(TreeNode root) {
12         List<Integer> result = new ArrayList<Integer>();
13         Stack<TreeNode> stack = new Stack<TreeNode>();
14         TreeNode tmpNode = null;
15         while(root != null || !stack.empty()) {
16             if(root != null) {
17                 stack.push(root);
18                 root = root.left;
19             } else {
20                 tmpNode = stack.pop();
21                 result.add(tmpNode.val);
22                 root = tmpNode.right;
23             }
24         }
25         return result;
26     }
27 }// 2 ms
Python
 1 # Definition for a binary tree node.
 2 # class TreeNode(object):
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.left = None
 6 #         self.right = None
 7 
 8 class Solution(object):
 9     def inorderTraversal(self, root):
10         """
11         :type root: TreeNode
12         :rtype: List[int]
13         """
14         stack, result = [], []
15         while stack or root:
16             if root:
17                 stack.append(root)
18                 root = root.left
19             else:
20                 root = stack.pop()
21                 result.append(root.val)
22                 root = root.right
23         return result
posted @ 2017-09-17 11:19  HitAnyKey  阅读(224)  评论(0编辑  收藏  举报