Saturday, December 26, 2020

 Tree Algorithms


We will revisit few basic algorithms in this page:

  • Tree Traversal

( Recursive and iterative)

  • Morris Inorder Traversal
  • TreeToList and ListToTree


Tree Traversal
    
         for inorder tree traversal
    

        public void inorder(TreeNode node) {
              if(node == null) return;
              inorder(node.left);
              print(node.val);
              inorder(node.right);
        }

        
         public void inorder(TreeNode node) {
               if(node == null) return;
               Stack<TreeNode> st = new Stack<TreeNode>();
               TreeNode cur = node;
               while( cur != null || st.Count() > 0) {
                   while(cur != null) {
                      st.Push(cur);
                      cur = cur.left;  
                   }

                  cur  = st.Top(); st.Pop();
                  Print(cur.val);
                  cur = cur.right;
              }
        } 


     PreOrder
      
      public void preorder(TreeNode root) {
            if(root == null) return null;
            Print(root.val);
            preorder(root.left);
            preorder(root.right);
        }

   public void preorder(TreeNode root) {
        if(root == null) return;
        Stack<TreeNode> st = new Stack<TreeNode>();
        st.Push(root);
        while(st.Size() > 0) {
              TreeNode cur = st.Top(); st.Pop();
              print(cur);
             if(cur.right != null) st.Push(cur.right);
             if(cur.left != null) st.Push(cur.left);
         }
   }
   

PostOrder is reverse of PreOrder